_IO流(字符流是否可以拷贝非纯文本的文件)

本文通过一次具体的文件拷贝实验揭示了使用字符流拷贝二进制文件的问题所在,并详细解释了为何这种方式会导致文件损坏及如何正确进行文件的二进制拷贝。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FileReader fr = new FileReader("1.jpg");
FileWriter fw = new FileWriter("copy.jpg");
int b;
while((b=fr.read())!= -1){
fw.write(b);
}
fr.close();
fw.close();

原来文件是1,097,126  bytes

拷贝过去文件是1,001,956  bytes

发现大小是有差异的

原因是把字节转成字符 不一定在我这码表中都能够查到比如说我把两个字节组合到一起  将字节转换成字符没有查到对应值我就用?代替 中间接收就是一个?

?号在写出的时候我也拆成不了字节 所以写出的时候可能就将?写过去了这样有一些字节就没有写过去 这样图片数据就破坏了

结论:

* 不可以拷贝非纯文本的文件
* 因为在读的时候会将字节转换为字符,在转换过程中,可能找不到对应的字符,就会用?代替,写出的时候会将字符转换成字节写出去
* 如果是?,直接写出,这样写出之后的文件就乱了,看不了了

 

转载于:https://www.cnblogs.com/oldfish711/p/8241658.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值