字符串到字节数组的转换因windows和ubuntu而异

时间:2016-10-24 10:53:40

标签: java arrays byte

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上获取相同的数组?

2 个答案:

答案 0 :(得分:2)

抱歉,我以为您使用的是有效的编码数据。

你的字节无效UTF-8,所以如果你有不同版本的Java,它可能会以不同的方式处理它。

new byte[]{1, -30, 48, 50, 49, 48}

简而言之,您应该使用文本来尝试存储二进制数据。这只会让你感到困惑(和浪费记忆)

答案 1 :(得分:1)

以下是文档针对String constructor所说的内容:

  

通过使用解码指定的字节数组构造一个新的String   该平台的默认字符集。

它对getBytes说了什么:

  

使用平台将此String编码为字节序列   默认字符集,将结果存储到新的字节数组中。

那么,为什么你会在不同的系统中获得不同的行为?因为他们的默认字符集是不同的。您可以使用Charset.defaultCharset()获取默认字符集。