在服务器端代码中,我将缓冲区大小和内容长度设置为文件长度()然后使用打开文件文件输入流。
稍后使用获取输出流HttpResponse.getOutputStream()并转储使用读取的数据字节文件输入流
我正在使用 Apache Tomcat 7.0.52,Java 7
在客户端
文件下载器.java
URL url = new URL("myFileURL");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setDoInput(true);
con.setConnectTimeout(10000);
con.setReadTimeout(10000);
con.setRequestMethod("GET");
con.setUseCaches(false);
con.setRequestProperty("User-Agent", "Mozilla/5.0");
con.connect();
FileOutputStream fos = new FileOutputStream("filename");
if(con.getResponseCode()==200){
InputStream is = con.getInputStream();
int readVal;
while((readVal=is.read())!=-1) fos.write(readVal);
}
fos.flush()
fos.close();
所以上面的代码无法下载大文件。
在使用 Java 7 的客户端上
你能试试这个吗
FileOutputStream outputStream = new FileOutputStream(fileName);
int bytesRead;
byte[] buffer = new byte[1024];
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
引用自https://stackoverflow.com/a/45453874/4121845 https://stackoverflow.com/a/45453874/4121845
因为你只想写入你实际读取的数据。考虑输入由 N 个缓冲区加一个字节组成的情况。如果没有 len 参数,您将写入 (N+1)*1024 字节而不是 N*1024+1 字节。还要考虑从套接字读取的情况,或者实际上读取的一般情况:InputStream.read() 的实际约定是它至少传输一个字节,而不是填充缓冲区。由于这样或那样的原因,通常它不能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)