我有以下代码:
byte[] b = new byte[len]; //len is preset to 157004 in this example
//fill b with data by reading from a socket
String pkt = new String(b);
System.out.println(b.length + " " + pkt.length());
这会在 Ubuntu 上打印出两个不同的值;157004 和 147549,但在 OS X 上的值相同。这个字符串实际上是 ImageIO 库正在传输的图像。因此,在 OS XI 上能够将字符串解码为图像就好了,但在 Ubuntu 上我不能。
我在 OS X 上使用版本 1.6.0_45,并在 Ubuntu 上尝试了相同的版本,除了 Oracle jdk 7 和默认的 openjdk。
我注意到我可以通过使用 Latin-1 解码来使字符串长度等于字节数组长度:
String pkt = new String(b,"ISO-8859-1");
然而,这并不能解码图像,并且理解正在发生的事情可能很困难,因为字符串对我来说看起来像是垃圾。
我对我使用相同的 jdk 版本但操作系统不同的事实感到困惑。