如何在 java 中制作下载器

How to make a downloader in java

我正在 java 制作一个下载器来下载小文件到大文件。

我下载文件的逻辑如下

  URL url=new URL(urlToGetFile);
                int count=-1; //this is for counter
                int offset=0;
                BufferedInputStream bufferedInputStream=new BufferedInputStream(url.openStream()); 
                FileOutputStream fileOutputStream=new FileOutputStream(FinalFilePath);


                byte data[] = new byte[1024];  



                while(  ((count=bufferedInputStream.read(data,0,1024))!=-1) )
                                         {
                        fileOutputStream.write(data,0, 1024);
                         }              
                bufferedInputStream.close();
                fileOutputStream.close();
                PrintLine("File has download");

而且它只适用于小文件但是当我下载大文件时,这些是下载的但已损坏

看了很多问题后,我也有点困惑,为什么每个人都在编码 fileOutputStream.write(data,0, 1024); 来制作 偏移量为 0,与 bufferedInputStream 的偏移量相同。

我还想知道如何更改 BufferedInputStream 和 FileOutputStream 的 offset。在循环中获取 字节时。

您需要write阅读的数量。

当您读入缓冲区时,您可以读取少于 1024 个字节。例如,一个 1200 字节的文件将被读取为 1024 + 176。您的 count 变量存储实际读取了多少,第二次循环时为 176。

损坏的原因是您将写入 176 'good' 字节加上 (1024 - 176 = 848) 个额外的字节,这些字节仍在上一次读取的 data 数组中。

所以尝试:

while( ((count=bufferedInputStream.read(data,0,1024))!=-1) )
{
    fileOutputStream.write(data,0, count);
}  

write 调用中的零偏移量是 data 的偏移量,您确实希望它为零。有关详细信息,请参阅 the Javadoc。其他流类型没有区别。