我有一个字节mybytes.dat
的文件,我正在写一个TCP服务器/客户端,服务器通过套接字将mybytes.dat
的内容发送到客户端。
如果将mybytes.dat
完全读入内存,则应用程序可以在本地网络堆栈上以大约160MB / s的速度发送数据。但是,现在我正在尝试流式传输> gt的数据文件。 1GB,不应该全部读入内存。
这related solution for sending a file in chunks似乎合适;但是,将大块文件读入内存(即缓冲区中一次可能为1MB)然后将它们作为较小的块(32kb)写入套接字会更有效吗?如果这是合理的,如何使用BufferedFileReader读取大块,然后将较小的块写入OutputStream?首先,让我声明至少一些变量:
BufferedInputStream blobReader = new BufferedInputStream(newInputStream("mybytes.dat"), 1024*1024);
OutputStream socketWriter = socket.getOutputStream();
将blobReader连接到socketWriter的正确方法是什么,这样我总是在内存中保留足够的字节以确保应用程序不受磁盘读取的限制?或者我完全偏离了这一推理线?