gpt4 book ai didi

java - 使用缓冲区写入 DataOutputStream 和从 RandomAccessFile 读取时出现问题

转载 作者:行者123 更新时间:2023-12-01 14:52:16 30 4
gpt4 key购买 nike

    DataOutputStream lWriter = new DataOutputStream(connection.getOutputStream());

int bytesRead = 0;
int offset = 0;
byte[] bytes = new byte[1048576]; // read 1MB at a time
RandomAccessFile f = new RandomAccessFile(xmlFile, "rw");
while(bytesRead != -1){
offset += f.read(bytes, offset, bytes.length);
if (bytesRead != -1){
lWriter.write(bytes, 0, bytes.length);
}
}

使用此代码,我在 f.read() 处遇到索引越界异常。我可能错误地滥用了参数偏移和长度。难道每次我读入一个 block 时,我都应该将偏移量移动到 block 的大小吗?也许我只是需要减少读取次数并使用较小的缓冲区?

目前我已经实现了这个工作,但我担心内存使用情况:

DataOutputStream lWriter = new DataOutputStream(connection.getOutputStream());      
lWriter.write(fileToBytes(xmlFile));

感谢您的帮助!

最佳答案

Java 中复制流的规范方法如下:

while ((count = in.read(buffer)) > 0)
{
out.write(buffer, 0, count);
// bytesRead += count; // if you are counting
}

您的循环包含许多错误。偏移量是缓冲区的偏移量,而不是文件的偏移量,您很少需要使用它。您不必提前偏移。您正在测试 bytesRead 但从未在初始化后设置它。在推进计数之前,您不会检查 EOS。您在写入时没有使用读取计数,因此您正在向文件写入垃圾。

关于java - 使用缓冲区写入 DataOutputStream 和从 RandomAccessFile 读取时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14715273/

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