如何使用它们引用的对象序列化字段?

时间:2017-10-23 18:50:06

标签: java serialization

我的类Message是File的类包装器。我想序列化Message,在服务器上发送它,而不是反序列化并获取File。但是当我反序列化时,我只得到文件名?我做错了什么?

类包装器:

public class Message implements Serializable{
    private int id;
    private File file;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public File getFile() {
        return file;
    }

    public void setFile(File file) {
        this.file = file;
    }
}

反序列化代码:

ObjectInputStream objectInputStream = new ObjectInputStream(in);
        Message message = (Message)objectInputStream.readObject();
        objectInputStream.close();
        String fileText = "";
        FileReader fileReader = new FileReader(message.getFile());
        BufferedReader br = new BufferedReader(fileReader);
        fileText = br.readLine();

当我尝试这样做时,我得到FileNotFoundException。请帮忙。谢谢。

1 个答案:

答案 0 :(得分:1)

File只是文件的抽象表示,基本上是实际文件的路径。您无法对其进行序列化,在网络上发送,然后就像文件的实际字节一样。

您需要实际读取文件中的字节并通过网络发送。如果您正在使用小文件,则可以将File替换为byte[](并可能添加文件名或其他元数据)并使用它。

如果你正在使用更大的文件,你应该考虑其他的而不是序列化,因为内存需求变得太大了。