这是代码
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的错误吗?或者我没有将字节缓冲区中的字节正确放入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/