1. 字符流概念
-
字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。字符流 = 字节流 + 编码表。 字节流和字符流的区别:
- 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
- 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
- 结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。
2. 字符流复制文本文件
public static void main(String[] args){
try{
File file = new File("/Users/xx/Desktop/test.txt");
File file1 = new File("/Users/xx/Desktop/test1.txt");
//流处理的设计模式是装饰者设计模式,所有我们要一步步创建
//创建InputStreamReader并指定编码格式
InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(file),"gbk");
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(file1));
//缓冲区字符流处理提高文件处理效率
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
String s;
//BufferedReader,String readLine():一次读取一行数据
while ((s = bufferedReader.readLine())!=null){
bufferedWriter.write(s);
bufferedWriter.newLine();//BufferedWriter,newLine():根据系统来决定换行符
bufferedWriter.flush();//刷新缓冲区
}
//释放资源
bufferedReader.close();
bufferedWriter.close();
}catch (Exception e){
System.out.println("error message : " + e.getMessage());
}
}
3. flush()和close()的区别:
- A:close()关闭流对象,但是先刷新一次缓冲区。关闭之后,流对象不可以继续再使用了。
- B:flush()仅仅刷新缓冲区,刷新之后,流对象还可以继续使用。