使用JavaHttpUrlConnection下载PDF文件,;缓冲区设置为1024字节——错误,;但是8号没问题

使用JavaHttpUrlConnection下载PDF文件,;缓冲区设置为1024字节——错误,;但是8号没问题,java,pdf,httpurlconnection,Java,Pdf,Httpurlconnection,我想用java(httpurlconnection类)下载一个pdf文件,但有一些东西很难理解,核心代码是: BufferedInputStream inputStream = new BufferedInputStream(httpConn.getInputStream()); OutputStream output = new FileOutputStream("F:/httpclient-tutorial.pdf"); byte[] infoBytes = new byte[BUFFER]

我想用java(httpurlconnection类)下载一个pdf文件,但有一些东西很难理解,核心代码是:

BufferedInputStream inputStream = new BufferedInputStream(httpConn.getInputStream());
OutputStream output = new FileOutputStream("F:/httpclient-tutorial.pdf");
byte[] infoBytes = new byte[BUFFER];
while(inputStream.read(infoBytes) != -1){
    output.write(infoBytes, 0, BUFFER);
}  

问题:当缓冲区为1024时,得到的pdf文件比实际文件大;但是缓冲区是8,那么就可以了。我不知道为什么?有人知道吗?

您在每次迭代中无条件地写出整个缓冲区。您应该只写出刚才读取的字节数:

int bytesRead;
while((bytesRead = inputStream.read(infoBytes)) != -1){
    output.write(infoBytes, 0, bytesRead);
}