java - 在字节数组中保存字节数组的长度

标签 java android file-management bytearrayoutputstream bufferedoutputstream

我在 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/

相关文章:

java - 使用 Java.io.File 列出目录内容时的奇怪行为

java - 将 Java 项目转换为 Eclipse 插件开发项目时遇到问题

java - OOP——每个类的成员变量和方法的数量

android - 即使我将 API 设置为 14,也无法使用 Theme.Holo.Light

batch-file - 递归移动文件到根文件夹

sharepoint - 不错的文件管理软件

java - spring boot+websocket+stomp+rabbitmq TCP连接失败

android - 在 Android 项目中使用 LibGDX 作为 fragment : How do i call libgdx method from android part?

android - 尝试在现有的flutter应用中实现flutter_contacts示例

salt-stack - 删除所有不受我的脚本管理的文件