我在 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();
我想获取在另一个类中写入的值 (b1.length) 但我获取的值与第一个 *.println() 不同。
System.out.println(aux.length); // The entire stream (b1+b2+b1.length)
System.out.println(aux[aux.length - 1]);
例如:
打印 1 --> 123744
打印 2 --> 53858
打印 3 --> 177603
打印 4 --> 96
在这种情况下,println1 和 println4 应该返回相同的大小。我做错了什么?
我检查过写入了 1 个字节 (177603-123744-53858 = 1),即 b1.length 字节。
谁能帮我正确写出第一个字节数组的大小?
最佳答案
Java 中的单个字节
是范围为-128..127
的有符号值。这不足以存储您要存储的值。
您应该至少编写一个 4 字节的整数来管理最大 Integer.MAX_VALUE
的长度。
发生的事情是该值被截断为 1 个字节,这很容易看出
123744 == 0x1E360
0x1E360 & 0xFF == 0x60
0x60 = 96
关于java - 在字节数组中保存字节数组的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20875068/