对于ObjectInputStream和ObjectOutputStream来说,在构造后的第一次读取或写入时,会先读取或写入一个对象头,之后再读取或写入对象。
例如,对于下段代码:
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
for (int i = 0; i < 2; ++i) {
oos.writeInt(1);
}
写入的内容是 头-对象-对象, 因此在读取时要这么读取:
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
for (int i = 0; i < 2; ++i) {
ois.readInt();
}
对于这段代码:
for (int i = 0; i < 2; ++i) {
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeInt(1);
}
写入的内容是 头-对象-头-对象,因此要这么读取:
for (int i = 0; i < 2; ++i) {
ObjectInputStream oos = new ObjectInputStream(socket.getInputStream());
oos.readInt();
}
ObjectOutputStream写入的头必须和ObjectInputStream读取的头一致。
本文是个人理解,如有错误请指出!
本文探讨了Java中ObjectInputStream和ObjectOutputStream在进行对象序列化和反序列化时的细节。在构造后首次写入或读取时,它们会处理对象头。例如,连续写入多个对象会导致额外的对象头。在读取时必须匹配写入的顺序和格式,以确保正确解析数据。
2310

被折叠的 条评论
为什么被折叠?



