Java自定义序列化抛出EOFException

时间:2018-03-15 22:44:52

标签: java serialization

以下代码在反序列化期间[在行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中读取或写入大小时,反序列化工作正常。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

out.write(size);

问题出在这里。这只写一个字节。要与您的阅读代码保持一致,它应该是

out.writeInt(size);