Http java文件下载问题

问题描述

| 尝试使用apache httpclient库下载文件,结果文件小于原始文件的问题(正常文件大小为92-93时约为32-32kb),并且无法在pdf查看器中正常打开。 有人可以解释一下为什么会这样吗? (使用firefox下载此文件有时会导致文件被完全下载,有时会被部分下载) 这是我用来通过URL下载文件代码
    URL url = new URL(\"pathtofile\");
    final URLConnection connection = url.openConnection();

    final InputStream is = connection.getInputStream();
    FileOutputStream fos = new FileOutputStream(\"C://result1.pdf\");

    byte buffer[] = new byte[1024];
    int bytesRead; 
    while ((bytesRead = is.read(buffer)) >= 0) {        
        fos.write(buffer,bytesRead);
    }
    fos.flush();
    fos.close();
    is.close();
附言试图使用HttpClient apache库下载此文件,结果相同。 更新:使用网络工具监视流量我发现通过Firefox和应用程序接收文件间的区别。 在Firefox中,第一个HttpPayloadLine是:
HTTPPayloadLine: 83 Td
/F2 5.80476 Tf
(A:\\040Asinis\\04017.12.10\\04008:32\\040laboratorij) Tj
100 Tz
1 1 1 rg
/F1 5.80476 Tf
0 0 0 rg
104.4856 0 Td
<0145> Tj
1 1 1 rg
0 0 0 rg
3.62799 0.72565 Td
/F2 5.80476 Tf
(\\040) Tj
1 1 1 rg
0.83137 0.81569 0.78431 RG
ET
51
首先使用应用程序HttpPayload是 ci2ѭµï½ci ¤ðð\'È/CÈAø¯ªÍ
übA«1Ãÿ   Åç«VɬZòYóóy7»ÇH.o²e<qZna3l±°¥þ6ñþ[2YÚ1ì³Eë-ÓÊÏ$y:tÎà![ËÅS¤¿É¡¢è,þ|ºs¨)@¢Qâ¯ÝF~}oµÒ>¦ OAxz³äÒ.ß9
æÃZ¤ùÒ¨*«øUή+4×
此测量是通过Microsoft网络监视器进行的 最后更新毕竟是服务器问题,在他们修复文件下载成功之后     

解决方法

        尝试更改为
while ((bytesRead = in.read(buffer)) != -1) {
 byte[] tmp = ArrayUtils.subarray(buffer,bytesRead);
 fos.write(tmp);
}
螨返回0字节,但这并不意味着它完成了。还只写收到的没有缓冲的字节。     ,        我发现的第一件事是检查whether5ѭ是否错误,因为即使没有到达文件末尾,它也可能(至少在理论上)返回0。到达EOF时6ѭ将返回return7ѭ,因此进行比较comparison8ѭ。 编辑: 我发现的第二件事(有点晚了,因为已经在其他答案中注意到了)是您正在将整个缓冲区写入输出流,而不管它中的多少实际上受到最新读取的影响操作。尝试类似的东西:
byte[] buffer = new byte[BUFFER_SIZE];
int bytesRead;
while ( (bytesRead = in.read(buffer)) >= 0 ) {
    out.write(buffer,bytesRead);
}
    ,        也许阅读错误流可以为您提供一些信息:
connection.getErrorStream();
    ,        可以改用
org.apache.commons.io.FileUtils.copyURLToFile(URL,File)
吗?