IO流有很多,大体可以有以下常用
字节流:
InputStream
FileInputStream
FileOutputStream
BufferedInputStream
BufferedOutputStream
System.in system.out
字符流:
Writer
Reader
FileReader
FileWriter
BufferedReader
BufferedWriter
转换流:
InputStreamReader :字节到字符的桥梁。解码。字节流对象读取到字符流
OutputStreamWriter:字符到字节的桥梁。编码。字符流对象写到字节流
流的操作规律:
因为流对象太多,开发时不知道用哪个对象合适,所以要弄清楚这个规律。
想要知道开发时用到哪些对象。只要通过四个明确即可。
1,明确数据是否是纯文本数据。确定流的体系。
是纯文本:----Reader。Writer。体系
否:-------------InputStream。OutputStream。体系
2,明确源和目的
从源读数据:输入流---------InputStream Reader
往目的写数据:输出流------OutputStream Writer
3,明确具体的设备。
源设备:
硬盘:File
键盘:System.in
内存:数组
网络: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,一旦操作文本涉及到具体的指定编码表时,必须使用转换流 。