作者:杨裙
本次任务完成时间:2019年5月16日
开发工具与关键技术:MyEclipse 10、Java
一、转换流
1、转换流是字节流通向字符流的桥梁,转换流有两个:字符输入流和字符输出流。
2、InputStreamReader是字符输入流,它可以把字节输入流转换成字符输入流,其输入流就是字节输入流的基类+字符流的基类,InputStreamReader是字符流Reader的已知子类。
3、OutputStreamWriter是字符输出流,它可以把字节输出流转换成字符输出流,其输出流就是字节输出流的基类+字符流的基类, OutputStreamWriter是字符输出流Writer的已知子类。
4、FileWriter和FileReader分别是OutputStreamWriter和InputStreamReader的直接子类。
5、转换流特有的功能:转换流可以将字节转成字符,原因在于,将获取到的字节通过查编码表获取到指定对象字符,转换流其实就是字节流 + 编码表。如果没有转换,那么就没有字符流。
6、转换流最常用于源或者目的设备是字节流,但是操作的却是文本数据,那么就可以使用转换流来进行把字节转换成字符。
7、如果操作设备上的文本数据,有编码转换,必须使用转换流。
8、事实上无论使用字节流还是字符流实际上在内存中最终都是通过字节的形式来操作流的,所以没有字符流转换字节流。
我们很常见的一种:键盘输入其本是字节流,那么其通过转换流作为桥梁进行转换,如下图例:
• 以上代码的转换: 首先是从键盘的输入也就是字节数据(字节流),然后通InputStreamReader作为转换的桥梁,将字节流变字符流,BufferedReader是缓冲流,当要提高运行的速率时,用缓冲流就可以提高运行的速率。
另一种OutputStreamWriter字符输出流的转换,如下图所示:
• 字符输出流与字符输入流不一样,其首先是先写入缓冲区,将字符数据用缓冲区对象将数据写入缓冲区,其目的地是writer,然后数据到了writer,目的地再到out控制台,最后是变成字节流,在这里BufferedWriter也是字符输出流的缓冲流,可以提高运行速率。
9、转换流和其它的流都是一样的,当用完流的时候,一定要关闭此流, OutputStreamWriter字符输出流在关闭此流时, 要先用flush()方法来刷新它。
注意:当一个中文字符串数据按照指定的编码表写入到一个文本文件中,那就不可以使用FileWriter输出流来读取文件了,只能用其父类OutputStreamWriter转换流来进行转换。