因为流对象太多,开发时不知道用哪个对象合适,通过以下四个步骤明确即可。
1,明确数据是否是纯文本数据,确定流的体系。
是纯文本:----Reader。Writer。字符流体系
否:-------------InputStream。OutputStream。字节流体系
2,明确源和目的
从源读数据:输入流---------InputStream Reader
往目的写数据:输出流------OutputStream Writer
3,明确具体的设备。
源设备:
硬盘:File 使用FileInputStream或FileReader
键盘:System.in
内存:数组 使用Arrays.asList转换为集合对象Properties,使用其list()方法转换为流对象
网络:Socket流
目的设备:
硬盘:File
控制台:System.out
内存:数组
网络:Socket流
4,是否需要其他额外功能。
1)是否需要高效(缓冲区);
是,就加上buffered
BufferedReader bufr = new BufferedReader(字符输入流);
BufferedWriter bufw = new BufferedWriter(字符输出流);
BufferedInputStream bufr = new BufferedReader(字节输入流);
BufferedOutputStream bufw = new BufferedWriter(字节输出流);
2)转换。
需要转换,当用的是字节流,但是操作的却是文本数据时。
所以要将已有的字节流转成字符流。这样操作方便。。
InputStreamReader,OutputStreamWriter:
InputStreamReader isr = new InputStreamReader(System.in);
OutputStreamWriter osw = new OutputStreamWriter(System.out);
注意:
如果需求中已经明确了指定编码表的动作。那就不可以使用FileWriter或FileReader,因为它们内部是使用默认的本地码表。只能使用其父类OutputStreamWriter.和 InputStreamReader
什么时候使用转换流呢?
1,源或者目的对应的设备是字节流,但是操作的却是文本数据,可以使用转换作为桥梁。提高对文本操作的便捷。
2,一旦操作文本涉及到具体的指定编码表时,必须使用转换流 。