我写了一个Java程序,为我下载音频文件,我正在使用BufferedInputStream。 read()函数工作正常但速度很慢,所以我尝试使用byte []来重载版本。
出于某种原因,下载后音频变得有损和奇怪。我不完全确定我做错了所以任何帮助都表示赞赏!这是代码的简化版本。
BufferedInputStream bin = new BufferedInputStream((new URL(url)).openConnection().getInputStream());
File file = new File(fileName);
FileOutputStream fop = new FileOutputStream(file);
int rd = bin.read();
while(rd != -1)
{
fop.write(rd);
rd = bin.read();
}
答案 0 :(得分:6)
请记住,当您以字节读取时,read将返回实际接收的字节数。您需要将该计数传递给write,因为您的字节数组中可能包含无关数据。在最后一个数据块中尤其如此。
答案 1 :(得分:1)
你正在使用的read方法实际上返回了它返回的int中的一个字节,这意味着实际上只使用了变量“rd”中32位的8位。
方法write声明它将int作为参数,但将“指定的字节写入此文件输出流”。这意味着你应该没事......但我认为你不是D:
尝试使用以字节数组作为参数的read方法,然后将该字节数组写入输出流。
然而,请注意另一个读取方法,即将字节数组作为参数的方法,它也返回一个int。但与您在示例中使用的方法(从输入数据中返回其中一个字节)不同,此另一个读取方法返回读取的字节数。这不是字节数组可以包含的字节数。在这种情况下,您必须确保不会向输出流写入比从上次读取操作实际读取的更多字节。