java - 如何将字段与其引用的对象序列化?

标签 java serialization

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

类包装:

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。请帮助。谢谢。

最佳答案

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

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

如果您正在处理更大的文件,您可能应该考虑序列化以外的其他方法,因为内存要求变得太大。

关于java - 如何将字段与其引用的对象序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46896468/

相关文章:

java - 使用 jetty-runner 启用 JSR356

java - 为什么这个 GridBagConstraints 代码不起作用?

java - 如何在使用 HtmlUnit 时 "get around"steam 登录?

java - Java中存储KeyStore : empty file and unable to reload

java - Maven:将本地 jar 复制到目标目录

java - 我有哪些选项可以通过从 iOS 或 Android 应用程序到服务器的 URL 请求提供最低隐私安全性?

c# - JSON.NET 忽略我所有没有 JsonProperty 属性的属性

c# - 将 C# 对象转换为 Json 对象

c# - XmlSerializer 在序列化动态加载的类型时抛出异常

java - 无法添加到已反序列化的自定义链接列表