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