Java 文件读写问题,为什么copy的文件和源文件的大小不一样呢
主要代码都在这BufferedReaderbr=newBufferedReader(newFileReader("E:\\Test\\莫斯科没有眼泪.mp3"));int...
主要代码都在这
BufferedReader br = new BufferedReader(new FileReader("E:\\Test\\莫斯科没有眼泪.mp3"));
int c = 0 ;
FileWriter fw=new FileWriter("E:\\Test\\莫斯科没有眼泪3.mp3",true);
while( (c = br.read())!=-1){
fw.write(c);
}
fw.close();
br.close();
新生成的"莫斯科没有眼泪3.mp3" 文件没有源文件大,一部分数据没有了,大家帮我分析分析(换成txt文件两者的内容都是一样的,格式也正确),换成其他文件怎么大小就不一样了呢? 展开
BufferedReader br = new BufferedReader(new FileReader("E:\\Test\\莫斯科没有眼泪.mp3"));
int c = 0 ;
FileWriter fw=new FileWriter("E:\\Test\\莫斯科没有眼泪3.mp3",true);
while( (c = br.read())!=-1){
fw.write(c);
}
fw.close();
br.close();
新生成的"莫斯科没有眼泪3.mp3" 文件没有源文件大,一部分数据没有了,大家帮我分析分析(换成txt文件两者的内容都是一样的,格式也正确),换成其他文件怎么大小就不一样了呢? 展开
2个回答
展开全部
小白ぁ棉花糖 说的没错,是你少了flush()操作。
而你所说的,“不是这样的,我找到原因了,源文件中有些字符是超出int的表示范围的,所以其中这些超出范围的字符并没有被读取,被漏掉了,所以比原来文件小”,我可以肯定地告诉你,你被误导或者你自己理解错误了!!
br.read()方法是返回一个字节,一个字节能表示的范围,int已经足够!!
计算机中,任何数据都是由字节组成的。。
此外提一下,你这样做的效率会很低,不要一个一个字节来读取,应该是:
byte[] data=new byte[10*1024];
int n=br.read(data);
while(n!=-1){
fw.write(data,0,n);
n=br.read(data);
}
fw.flush();
fw.close();
...
你对比下,我这个的速度肯定会比你的快,尤其是复制大文件的时候更明显
而你所说的,“不是这样的,我找到原因了,源文件中有些字符是超出int的表示范围的,所以其中这些超出范围的字符并没有被读取,被漏掉了,所以比原来文件小”,我可以肯定地告诉你,你被误导或者你自己理解错误了!!
br.read()方法是返回一个字节,一个字节能表示的范围,int已经足够!!
计算机中,任何数据都是由字节组成的。。
此外提一下,你这样做的效率会很低,不要一个一个字节来读取,应该是:
byte[] data=new byte[10*1024];
int n=br.read(data);
while(n!=-1){
fw.write(data,0,n);
n=br.read(data);
}
fw.flush();
fw.close();
...
你对比下,我这个的速度肯定会比你的快,尤其是复制大文件的时候更明显
追问
你这个改成字节挺好,速度大大提升,原来要40多秒,现在瞬间完成, 确是正解。
你说的那个flush问题,还真不是少了flush,不信你试试,我试过了,还是比源文件小
追答
嗯,好的,那我去了解下!!可能会长见识呢
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在fw.close()之前调一下fw.flush();看看
更多追问追答
追问
不是这样的,我找到原因了,源文件中有些字符是超出int的表示范围的,所以其中这些超出范围的字符并没有被读取,被漏掉了,所以比原来文件小
追答
好吧,reader是字符流,读取非字符文件还是要用inputstream
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询