一、读取转换流
将字节流对象转换成字符流对象,使用转换流,InputStreamReader是字节流通向字符流的桥梁。存在硬盘上的是字节,读取出来的是字符,所以是字节转字符。
InputStreamReader本身是个字符流,需要传递进去一个字节流。
键盘录入最常见写法
BufferedReader bufr = new BufferedReader(newInputStreamReader(System.in));
二、写入转换流
OutputStreamWriter是字符流通向字节流的桥梁。录入的是字符,存在硬盘上的是字节,所以是字符转字节。
BufferedWriter bufw = new BufferedWriter(newOutputStreamWriter(System.out));
三、流操作规律
之间的文章介绍的流操作,基本是两种形式。一是:在程序中写字符串,保存在内存里,然后写到文件中。
二是:读文件,保存在内存里,然后写到另一个文件中,即拷贝。
另外还有几种形式:
1、把键盘录入的数据显示在控制台上
源:键盘 System.in
目的:控制台 System.out
2、把键盘录入的数据存储到一个文件中
源:键盘录入 System.in
目的:文件 newFileOutputStream("");
3、把一个文件打印在控制台上。
源:文件 new FileInputStream("");
目的:控制台 System.out
-----------------------------------------------------------
流操作的基本规律:
通过三个明确来完成
1、明确源和目的
源:输入流InputStream Reader
目的:输出流OutputStream Writer
2、操作的数据是否是纯文本。
是:字符流
否:字节流
3、再明确使用哪个具体的对象通过设备来区分:
源设备:内存,硬盘,键盘
目的设备:内存,硬盘(文件),控制台。
4、是否需要提高效率:
是:加入缓冲区
-------------------------------------------------------------
接下来用上面的方法举例分析:
需求一:把键盘录入的数据存储到一个文件中。并且加入指定的编码表。
源: InputStream,Reader
是不是纯文本?(键盘录入的肯定是纯文本)是,则用Reader
设备:是键盘,对应的对象是System.in. (不是选择Reader吗?System.in对应的不是字节流吗?)
为了操作键盘的文本数据方便,转成字符流,按照字符串操作是最方便的。
所以既然明确了Reader,那么就将System.in转换成Reader. 用Reader体系中的读取转换流,
InputStreamReader.
代码部分: InputStreamReader isr = newInputStreamReader(Sysem.in);
需要提高效率吗?需要!BufferedReader
代码部分:BufferedReader bufr = new BufferedReader(isr);
目的:OutputStream,Writer
是否是纯文本?是!Writer.
设备:硬盘。一个文件。使用FileWriter. 但是FileWriter使用的是默认编码表--GBK,而指定的编码表只有转换流可以指定。(这是转换流的主要作用)所以使用的对象是OutputStreamWriter.而该转换流对象要接受一个字节输出流。而且是还可以操作文件的字节输出流,因此选择FileOutputStream.
代码部分:OutputStreamWriter osw = new OutputStreamWriter( newFileOutputStream("d.txt"),"UTF-8");
需要提高效率吗?需要!BufferedWriter
代码部分:BufferedWriter bufw = new BufferedWriter(osw);
转换流和流操作规律
于 2014-09-10 10:00:05 首次发布