gpt4 book ai didi

Java 读取大于 2 GB 的文件(使用分块)

转载 作者:搜寻专家 更新时间:2023-10-31 20:22:49 24 4
gpt4 key购买 nike

我正在实现文件传输服务器,但在通过网络发送大于 2 GB 的文件时遇到了问题。当我获得要使用的 File 并尝试将其内容读入 byte[] 时,问题就开始了。我有一个 for 循环:

for(long i = 0; i < fileToSend.length(); i += PACKET_SIZE){
fileBytes = getBytesFromFile(fileToSend, i);


其中 getBytesFromFile()fileToSend 中读取 PACKET_SIZE 个字节,然后在 for环形。 getBytesFromFile() 使用 i 作为偏移量;但是,FileInputStream.read() 中的偏移量变量必须是 int。我确信有更好的方法可以将这个文件读入数组,只是我还没有找到。

我宁愿暂时不使用 NIO,尽管我将来会改用它。放纵我的疯狂:-)

最佳答案

您似乎没有正确地从文件中读取数据。在 Java 中从流中读取数据时,标准做法是将数据读入缓冲区。缓冲区的大小可以是您的数据包大小。

File fileToSend = //...
InputStream in = new FileInputStream(fileToSend);
OutputStream out = //...
byte buffer[] = new byte[PACKET_SIZE];
int read;
while ((read = in.read(buffer)) != -1){
out.write(buffer, 0, read);
}
in.close();
out.close();

请注意,缓冲区数组的大小保持不变。 但是——如果缓冲区不能被填满(比如当它到达文件末尾时),数组的剩余元素将包含最后一个数据包的数据,所以你必须忽略这些元素(这是我代码示例中 out.write() 行的作用)

关于Java 读取大于 2 GB 的文件(使用分块),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8258592/

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