gpt4 book ai didi

java - 我的 ByteBuffer 没有正确地将其字节放入字节数组中

转载 作者:行者123 更新时间:2023-12-02 06:53:03 24 4
gpt4 key购买 nike

这是代码

byte data[] = new byte[1024];
fout = new FileOutputStream(fileLocation);

ByteBuffer bb = ByteBuffer.allocate(i+i); // i is size of download
ReadableByteChannel rbc = Channels.newChannel(url.openStream());
while( (dat = rbc.read(bb)) != -1 )

{

bb.get(data);

fout.write(data, 0, 1024); // write the data to the file

speed.setText(String.valueOf(dat));

}

在此代码中,我尝试从给定 URL 下载文件,但该文件并未完全完成。

我不知道发生了什么错误,是ReadableByteChannel的错吗?或者我没有将 ByteBuffer 中的字节正确放入 Byte[] 中。

最佳答案

当您读入ByteBuffer时,缓冲区的偏移量会发生变化。这意味着,读取后,您需要倒回ByteBuffer:

while ((dat = rbc.read(bb)) != -1) {
fout.write(bb.array(), 0, bb.position());
bb.rewind(); // prepare the byte buffer for another read
}

但就您而言,无论如何,您实际上并不需要 ByteBuffer,只需使用纯字节数组就足够了 - 而且它更短:

final InputStream in = url.openStream();
final byte[] buf = new byte[16384];
while ((dat = in.read(buf)) != -1)
fout.write(buf, 0, dat);

请注意,在 Java 1.7 中,您可以使用它:

Files.copy(url.openStream(), Paths.get(fileLocation));

关于java - 我的 ByteBuffer 没有正确地将其字节放入字节数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17780184/

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