写入ObjectOutputStream并返回垃圾

use*_*914 1 java

我将许多对象放入流中,然后从中获取字节数组,然后读取所有内容.前两个数据到达状态良好,然后我得到零,然后是EOF异常.为什么?

try {
     ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
     ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
     objectOutputStream.writeObject("abcdef");
     objectOutputStream.writeInt(1);
     objectOutputStream.writeObject(new byte[]{1,2,3,4,5,6,7,8});
     objectOutputStream.writeInt(2);
     objectOutputStream.writeObject(new byte[]{11,12,13,14,15,16,17,18});
     objectOutputStream.close();


     byte[] original = byteArrayOutputStream.toByteArray();
     System.out.println(Arrays.toString(original));

     byte[] b=new byte[8];
     ObjectInputStream objectInputStream = new ObjectInputStream(new ByteArrayInputStream(original));
     String s= (String) objectInputStream.readObject(); // works fine
     objectInputStream.readInt(); // works fine

     objectInputStream.read(b); // why it reads zeroes instead of [1,2,3,4,5,6,7,8]?
     System.out.println(Arrays.toString(b));
     int length = objectInputStream.readInt(); // EOF unexpectedly reached, why?
     objectInputStream.read(b);
}
catch (IOException e) {
     e.printStackTrace();
} catch (ClassNotFoundException e) {
     e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

例外:

java.io.EOFException
at java.io.DataInputStream.readInt(DataInputStream.java:375)
at java.io.ObjectInputStream$BlockDataInputStream.readInt(ObjectInputStream.java:2775)
at java.io.ObjectInputStream.readInt(ObjectInputStream.java:949)
Run Code Online (Sandbox Code Playgroud)

Bri*_*new 5

我怀疑第一个问题是你需要close()你的objectOutputStream.有关示例,请参阅ObjectOutputStream文档.