java.io 包下的IO流很多:
其中,以Stream结尾的为字节流,以Writer或者Reader结尾的为字符流。所有的输入流都是抽象类InputStream(字节输入流)或者抽象类Reader(字符输入流)的子类,所有的输出流都是抽象类OutputStream(字节输出流)或者抽象类Writer(字符输出流)的子类。字符流能实现的功能字节流都能实现,反之不一定。如:图片,视频等二进制文件,只能使用字节流读写。
1、字符流FileReader和FileWriter
2、字符缓冲流BufferedReader和BufferedWriter
3、字节流FileInputStream和FileOutputStream
4、字节缓冲流BufferedInputStream和BufferedOutputStream
5、转换流:InputStreamReader和OutputStreamWriter
7、对象操作流ObjectInputStream和ObjectOutputStream
12、IO流使用规律总结:
(1)明确要操作的数据是数据源还是数据目的(要读还是要写)
源:InputStream Reader
目的:OutputStream Writer
(2)明确要操作的设备上的数据是字节还是文本
源:
字节:InputStream
文本:Reader
目的:
字节:OutputStream
文本:Writer
(3)明确数据所在的具体设备
源设备:
硬盘:文件 File开头
内存:数组,字符串
键盘:System.in
网络:Socket
目的设备:
硬盘:文件 File开头
内存:数组,字符串
屏幕:System.out
网络:Socket
(4)明确是否需要额外功能?
需要转换——转换流 InputStreamReader OutputStreamWriter
需要高效——缓冲流Bufferedxxx
多个源——序列流 SequenceInputStream
对象序列化——ObjectInputStream,ObjectOutputStream
保证数据的输出形式——打印流PrintStream Printwriter
操作基本数据,保证字节原样性——DataOutputStream,DataInputStream