对于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读取的头一致。
本文是个人理解,如有错误请指出!
版权声明:本文为wlz_2003原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。