java提供了完善的从文件或控制台读写的机制。
为了避免长时间不用后忘记,在此归纳总结。
参考了
http://blog.csdn.net/sunzhenhua0608/article/details/8692122
流的分类:
1. 从方向上分: 输入和输出
2. 从单位上分:字符流和字节流
3.从功能上分:装饰流和非装饰流
区分字节和字符:
1. 字节流:处理单位是字节(byte)带stream字样的。
对于字节流处理的类都继承自InputStream和OutputStream这两个抽象类。
InputStream提供的最重要的方法是:
Java代码
- read();
- read(byte[] b) ;
- read(byte[] b, int off, int len) ;
用于从输入流中读取字节。
OutputStream提供的最重要的方法是:
Java代码
- write(int b);
- write(byte[] b);
- write(byte[] b, int off, int len)
用于将字节写入输出流。
所有的字符流操作类都继承自Reader或者Writer这两个抽象类。
Reader提供的重要方法有:
Java代码
- read(char[] cbuf);
- read(char[] cbuf, int off, int len);
- read(CharBuffer target);
他们提供了从流中读取数据到字符数组或者CharBuffer的功能。
2.
字符流:处理单位是字符(16位的unicode表示的编码)。从reader writer派生而来的。
Writer提供的重要方法有:
Java代码
- write(char[] cbuf);
- write(char[] cbuf, int off, int len);
- write(int c);
- write(String str);
write(String str, int off, int len);
他们提供了把字符、字符数组或者字符串写入流中的功能。
名字中既有writer和stream或者reader和stream的,是byte和char转换的桥梁。
a. 字节流:
InputStream
|-- FileInputStream (基本文件流)
|-- BufferedInputStream
|-- DataInputStream
|-- ObjectInputStream
OutputStream 同上图
BufferedInputStream,DataInputStream,ObjectInputStream 只是在FileInputStream 上增添了相应的功能,构造时先构造FileInputStream
b. 字符流:
Reader
|-- InputStreamReader (byte->char 桥梁)
|-- BufferedReader (常用)
Writer
|-- OutputStreamWriter (char->byte 桥梁)
|-- BufferedWriter
|-- PrintWriter (常用)