我需要使用NIO通过ServerSocket传输大约100MB的数据,但我无法想出如何在不中断传输的情况下保持传输状态。
我的第一个想法是发送文件的大小,但显然我无法发送这么大的文件大小,因为它一次性无法放入RAM中。然后我想,为什么不一直传输直到没有接收到数据,但这就是问题所在。
即使我一直在写服务器端的数据
FileChannel fc = new FileInputStream(f).getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
while(fc.read(buffer) > 0) {
buffer.flip();
while(channel.write(buffer) > 0);
buffer.clear();
}
但是因为文件传输必须要有间断,所以不停地读取数据并在没有数据可用时中断是一个不好的想法。
我无法想象如何在不必发送每个片段的数据包和操作代码的情况下告诉客户端是否仍然有可用数据。这是否可能?
我还在想是否有更好的方法来发送整个缓冲区,而不是像下面这样。
while(channel.write(buffer) > 0);