我正在用 Java 开发一个客户端-服务器系统。我通过带有序列化对象的 TCP 通道发送消息。
我还需要发送文件。我可以定义自己的自定义消息类:
public class SendFile implements Serializable {
private byte[] fileContents;
...
}
并发送它。如果我们有一个大文件,这会带来一个问题,据我了解,它会在将文件发送到另一端之前尝试将所有内容都保存在内存中。
我已经阅读过,Externalizable
但如果在通过 TCP 通道发送文件之前仍在将文件读取到我所有计算机的内存中,那也不会更好。我想要一些“懒惰”的方式来做到这一点(当我通过网络发送它时从磁盘读取它,并从内存中丢弃已经读取的内容)。
处理这个问题的最干净的方法是什么?在最坏的情况下,我可以把它分成小块,但如果可能的话,我想避免它。
编辑:
当然,我可以在文件上打开一个流并“发送”。但这意味着以不同的方式处理发送文件和所有其他消息,这是我希望避免的。
谢谢