字符流_FileReader和FileWriter拷贝一张图片(会出错的原因)。
字节流可以拷贝视频和音频等文件,那么字符流可以拷贝这些吗?
经过验证拷贝图片是不行的。发现丢失了信息,为什么呢?
计算机中的所有信息都是以二进制形式进行的存储(1010)图片中的也都是二进制在读取文件的时候
字符流自动对这些二进制按照码表进行了编码处理,但是图片本来就是二进制文件,不需要进行编码。
有一些巧合在码表中有对应,就可以处理,并不是所有的二进制都可以找到对应的。信息就会丢失。
所以字符流只能拷贝以字符为单位的文本文件
(以ASCII码为例是127个,并不是所有的二进制都可以找到对应的ASCII,有些对不上的,就会丢失信息。)
何时使用字符流,何时使用字节流?依据是什么?
使用字符流的应用场景:如果是读写字符数据的时候则使用字符流。
使用字节流的应用场景:如果是读写的数据都不需要转换成字符的时候,则使用字节流。
package com.cn.writer;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* Author:Liu Zhiyong(QQ:1012421396)
* Version:Version_1
* Date:2016年7月28日16:29:21
* Desc:使用FileReader和FileWriter拷贝一张图片
字节流可以拷贝视频和音频等文件,那么字符流可以拷贝这些吗?
经过验证拷贝图片是不行的。发现丢失了信息,为什么呢?
计算机中的所有信息都是以二进制形式进行的存储(1010)图片中的也都是二进制在读取文件的时候
字符流自动对这些二进制按照码表进行了编码处理,但是图片本来就是二进制文件,不需要进行编码。
有一些巧合在码表中有对应,就可以处理,并不是所有的二进制都可以找到对应的。信息就会丢失。
所以字符流只能拷贝以字符为单位的文本文件
(以ASCII码为例是127个,并不是所有的二进制都可以找到对应的ASCII,有些对不上的,就会丢失信息。)
何时使用字符流,何时使用字节流?依据是什么?
使用字符流的应用场景:如果是读写字符数据的时候则使用字符流。
使用字节流的应用场景:如果是读写的数据都不需要转换成字符的时候,则使用字节流。
*/
public class Demo2 {
public static void main(String[] args) throws IOException {
//找到目标文件
File file = new File("F:/cool.png");
File destFile = new File("f:/nn.png");
//建立数据通道
FileReader fileReader = new FileReader(file);
FileWriter fileWriter = new FileWriter(destFile);
//建立缓冲字符数组边读边写
int length = 0;
char[] buf = new char[1024];
while((length = fileReader.read(buf)) != -1){
fileWriter.write(buf, 0, length);
}
//关闭资源
fileWriter.close();
fileReader.close();
}
}