public static void main(String args[])
{
byte[] bytearray = new byte[]{1, -30, 48, 50, 49, 48};
for (int i = 0; i < bytearray.length; i++) {
System.out.print(bytearray[i]+", ");
}
System.out.println();
System.out.println("Length of byteArray before : "+bytearray.length);
String st = new String(bytearray);
System.out.println("String value : "+ st);
bytearray = st.getBytes();
for (int i = 0; i < bytearray.length; i++) {
System.out.print(bytearray[i]+", ");
}
System.out.println();
System.out.println("Length of byteArray after : "+bytearray.length);
}
这是我的程序,如果我在Windows上执行此操作,我得到的字节与之前完全相同,但在ubuntu上,它提供额外的2个字节,我没有理解它?为什么?
我应该使用哪种方法在ubuntu上获取相同的数组?
答案 0 :(得分:2)
抱歉,我以为您使用的是有效的编码数据。
你的字节无效UTF-8,所以如果你有不同版本的Java,它可能会以不同的方式处理它。
new byte[]{1, -30, 48, 50, 49, 48}
简而言之,您应该使用文本来尝试存储二进制数据。这只会让你感到困惑(和浪费记忆)
答案 1 :(得分:1)
以下是文档针对String constructor所说的内容:
通过使用解码指定的字节数组构造一个新的String 该平台的默认字符集。
它对getBytes说了什么:
使用平台将此String编码为字节序列 默认字符集,将结果存储到新的字节数组中。
那么,为什么你会在不同的系统中获得不同的行为?因为他们的默认字符集是不同的。您可以使用Charset.defaultCharset()
获取默认字符集。