如果我使用ISO-8859-1编码将二进制流读取为String,然后将其转换回二进制流,我是否总是会得到完全相同的字节?如果没有,什么时候我不会得到相同的字节?

public byte[] toStringAndBack(byte[] binaryData) throws Exception {
    String s = new String(binaryData, "ISO-8859-1");
    return s.getBytes("ISO-8859-1");
}


===编辑===

测试:

    byte[] d = {0, 1, 2, 3, 4, (byte)128, (byte)129, (byte)130}; // some not defined values
    byte[] dd = toStringAndBack(d);
    for (byte b : dd)
        System.out.print((b&0xFF) + " ");


输出:

0 1 2 3 4 128 129 130


因此,即使未定义的字节似乎也可以正确转换。

最佳答案

constructor you're using说:


  未指定给定字符集中给定字节无效时此构造函数的行为。


因此,从理论上讲,如果ISO-8859-1未将字符分配给任何值(例如0-31和128-160),则可能会失败。

这意味着,即使它在给定的JVM的String实现(或ISO-8859-1的Charset实现)上运行,也不能依靠它在另一个JVM的String / Charset实现上运行(是否仅仅是一个来自同一供应商或不同供应商的JVM的JVM不同的dot-rev)。

关于java - ISO-8859-1在Java中编码为二进制安全吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34786221/

10-09 00:29