gpt4 book ai didi

Java - 通过 channel 传输大文件 - NIO

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:03:18 28 4
gpt4 key购买 nike

我必须使用 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);

最佳答案

也许您正在寻找这个:

channel.transferFrom(0, fc.size(), fc);

关于Java - 通过 channel 传输大文件 - NIO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10677130/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com