相对于程序而言
- 按方向分有:输入流和输出流
- 按类型分有:字符流(unicode编码一个字符两个字节8位*2如中文)和字节流(一个字符一个字节8位都是英文)所以有存在的必要
- 按功能分有:节点流(直接套在数据源上)和处理流(套在节点流或处理流上)
按节点流类型分
类型 | 字符流 | 字节流 |
---|---|---|
file类型 | fileReader | fileInputStream(字节的输入输出) |
memory array类型 | charArrayReader | byteArrayInputStream |
memory String类型 | StringReader | |
pipe管道类型 | pipedReader | PipedInputSream |
处理流类型
类型 | 字符流 | 字节流 |
---|---|---|
缓冲流类型 | bufferedReader | BufferedInputStream |
字节到字符序列化转换流类型 | InputStreamRead | |
对象流——Object | ObjectInputStream | |
数据流 | DataInputStream/DataOutputStream | |
打印流——Print | PrintWriter | PrintStream |
Filtering类型 | filterReader | filterInputStream |
计数 | LineNumberReader | LineNumberInputStream |
peeking ahead | PushbackReader | PushbackInputStream |
IO流总结
-
关键点:
-
文件类型(File)的流是对文件进行读写。
-
对象类型(Object)的流是将一个对象写到文件里面,或者将一个文件里面的数据按对象形式进行读取(必须实行Serializable 接口)。
-
缓冲流(Buffered)可以一行一行读和换行的写。
-
数据类型(Date/ByteArray)的流是可以存取机器无关的java原始数据类型
-
转换流(InputStreamWriter)可是可以将把OutputStream转换成Writer之后就可以一个字符一个字符地通过管道写入数据了,而且还可以写入字符串。我们如果用一个FileOutputStream流往文件里面写东西,得要一个字节一个字节地写进去,但是如果我们在FileOutputStream流上面套上一个字符转换流,那我们就可以一个字符串一个字符串地写进去。
-
打印流(print)都是输出流,输出操作不会抛出异常有自动flush功能,println可用于多种数据类型的输出
//对于PrintWriter来说,当启用字段刷新之后, 调用println或者printf或者format方法,便会立马刷新操作(自动刷新).
public class PrintStreamDemo {
public static void main(String[] args) throws Exception {
FileOutputStream fos = new FileOutputStream("text/hello.txt");
PrintStream ps = new PrintStream(fos);
//直接使用PrintStream输出对象,将数据对象写到了文件里面
ps.print(new PrintStreamDemo());
}
}