我在BufferedOutputStream中写了三次:
b1 = baos1.toByteArray();
b2 = baos2.toByteArray();
bos.write(b1);
bos.write(b2);
bos.write(b1.length);
System.out.println(b1.length);
System.out.println(b2.length);
bos.flush();
bos.close();
我想在另一个类中获取值write(b1.length),但是我得到的值与第一个* .println()不同。
System.out.println(aux.length); // The entire stream (b1+b2+b1.length)
System.out.println(aux[aux.length - 1]);
例如:
Println 1 - > 123744
Println 2 - > 53858
Println 3 - > 177603
Println 4 - > 96
在这种情况下,println1和println4应返回相同的大小。我做错了什么?
我已检查写过1字节(177603-123744-53858 = 1),即b1.length字节。
有人可以帮我正确写出第一个字节数组的大小吗?
答案 0 :(得分:3)
Java中的单个byte
是带有范围-128..127
的带符号值。这对于您尝试存储的值是不够的。
您应该至少写一个4字节的整数来管理长度Integer.MAX_VALUE
。
该值会被截断为1个字节,这很容易看作
123744 == 0x1E360
0x1E360 & 0xFF == 0x60
0x60 = 96
答案 1 :(得分:0)
我已经解决了这个问题:
bos.write(ByteBuffer.allocate(4).putInt(b2.length).array());
而不是:
bos.write(b1.length);
现在它可以工作,我可以检索长度。
答案 2 :(得分:0)
在DataOutputStream中包装BufferedOutputStream并使用其write(byte[])
和writeInt(int)
方法。