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文件两者的内容都是一样的,格式也正确),换成其他文件怎么大小就不一样了呢?
展开
 我来答
Stale331x
推荐于2016-12-05 · TA获得超过1299个赞
知道小有建树答主
回答量:1276
采纳率:33%
帮助的人:833万
展开全部
小白ぁ棉花糖 说的没错,是你少了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();
...

你对比下,我这个的速度肯定会比你的快,尤其是复制大文件的时候更明显
追问
  1. 你这个改成字节挺好,速度大大提升,原来要40多秒,现在瞬间完成, 确是正解。

  2. 你说的那个flush问题,还真不是少了flush,不信你试试,我试过了,还是比源文件小

追答
嗯,好的,那我去了解下!!可能会长见识呢
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小白AI绘画
2013-12-24 · TA获得超过1358个赞
知道小有建树答主
回答量:303
采纳率:0%
帮助的人:469万
展开全部
在fw.close()之前调一下fw.flush();看看
更多追问追答
追问
不是这样的,我找到原因了,源文件中有些字符是超出int的表示范围的,所以其中这些超出范围的字符并没有被读取,被漏掉了,所以比原来文件小
追答
好吧,reader是字符流,读取非字符文件还是要用inputstream
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式