Fis*_*der 2 java io objectinputstream bytearrayinputstream
有不明白的地方,请大家帮忙。
System.out.println("\n" + Arrays.toString(buffer) + "\n");
System.out.println("buffer.length = " + buffer.length + "\nnew ByteArrayInputStream(buffer).available() is: " + new ByteArrayInputStream(buffer).available());
ObjectInput input = new ObjectInputStream(new ByteArrayInputStream(buffer));
System.out.println("input.available(): " + input.available());
Run Code Online (Sandbox Code Playgroud)
它的输出如下:
[-84, -19, 0, 5]
buffer.length = 4
new ByteArrayInputStream(buffer).available() is: 4
input.available(): 0
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么一个包含 4 个有效字节的字节数组在放入 ObjectInputStream 后变为零。
我尝试过的事情:
所以,我不知道为什么会发生这种情况。
请帮忙,非常感谢!
正如另一个答案所提到的,available仅表示在阻塞发生之前您可以读取的字节数。
然而,我的猜测是,您没有遵循 的规则ObjectInputStream,其中指定An ObjectInputStream deserializes primitive data and objects previously written using an ObjectOutputStream.
换句话说,为了实际使用 读取数据ObjectInputStream,您首先必须使用ObjectOutputStream某种类型的写入数据。这是一个示例,显示了您提供的数据:
byte[] buffer = new byte[]{-84,-19,0,5};
ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream= new ObjectOutputStream(out);
objectOutputStream.write(buffer);
objectOutputStream.flush();
ObjectInput input = new ObjectInputStream(new ByteArrayInputStream(out.toByteArray()));
System.out.println("input.available(): " + input.available());
System.out.println("input.readByte(): " + input.readByte());
Run Code Online (Sandbox Code Playgroud)
(我要补充一点,我很少在 Java 中使用 IO,所以以上可能不是最佳实践或有多余的代码。)
| 归档时间: |
|
| 查看次数: |
2788 次 |
| 最近记录: |