如何在 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。其他流类型没有区别。
我正在 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。其他流类型没有区别。