gpt4 book ai didi

Java-使用缓冲区通过网络下载文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:45:42 25 4
gpt4 key购买 nike

我想直接从网络流中读取字节并将字节写入文件。但每次我运行程序时,实际上写入文件的字节很少。

Java:

InputStream in = uc.getInputStream();
int clength=uc.getContentLength();
byte[] barr = new byte[clength];
int offset=0;
int totalwritten=0;
int i;
int wrote=0;

OutputStream out = new FileOutputStream("file.xlsx");
while(in.available()!=0) {
wrote=in.read(barr, offset, clength-offset);
out.write(barr, offset, wrote);
offset+=wrote;
totalwritten+=wrote;
}
System.out.println("Written: "+totalwritten+" of "+clength);
out.flush();

最佳答案

那是因为available()不做你认为它做的事。阅读其 API 文档。您应该简单地读取直到读取的字节数,由 read() 返回, 为 -1。或者更简单,使用 Files.copy() :

Files.copy(in, new File("file.xlsx").toPath());

使用具有输入流大小的缓冲区也几乎违背了使用缓冲区的目的,即在内存中只有几个字节。

如果要重新实现copy(),一般模式如下:

byte[] buffer = new byte[4096]; // number of bytes in memory
int numberOfBytesRead;
while ((numberOfBytesRead = in.read(buffer)) >= 0) {
out.write(buffer, 0, numberOfBytesRead);
}

关于Java-使用缓冲区通过网络下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27707222/

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