以下代码在反序列化期间[在行size = in.readInt();]中抛出一个EOFException,我很困惑为什么会这样。
import java.io.IOException;
import java.io.ObjectStreamException;
import java.io.Serializable;
import java.util.ArrayList;
public class ArrayList2 implements Serializable
{
transient String [] bs = new String[100];
transient int size;
// custom serialiation (the physical structure is not equal to logical structure)
private void writeObject(java.io.ObjectOutputStream out)
throws IOException
{
out.defaultWriteObject();
out.write(size);
for (int i=0;i<size;i++)
out.writeObject(bs[i]);
}
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException {
in.defaultReadObject();
size = in.readInt(); // ERROR OCCURS HERE
bs = new String[size];
for (int i = 0; i < size; i++)
bs[i] = (String) in.readObject();
}
}
有趣的是,当大小不是暂时的并且我没有在readObject和writeObject中读取或写入大小时,反序列化工作正常。
有什么想法吗?
答案 0 :(得分:1)
out.write(size);
问题出在这里。这只写一个字节。要与您的阅读代码保持一致,它应该是
out.writeInt(size);