java io流:
横向分类分为字节流和字符流。
纵向分类分为节点流和包装流(高级流)。
这里的“横纵”读者自行体会。
包装流(高级流)
包装流包装节点流,以节点流作为构造源,主要有:缓冲流、数据流、对象流、转换流。
-
缓冲流(
Buffred[Input/Output]Stream、Buffred[Reader/Writer]
):顾名思义存在一个缓冲区,读写操作优先在缓冲区进行,缓冲区满了才一次性对外部存储读写,提高效率。 -
数据流(
Data[Input/Output]Stream
):文件字节流和缓冲字节流仅仅支持简单的字节写入写出,数据流仅包装字节流,可支持java8大基本类型输入输出,但一次读写一个基本类型。 -
对象流(
Object[Input/Output]Stream
):仅包装字节流,支持向流中读写java可序列化对象。 -
转换流(
[Input/Output]Stream[Reader/Writer]
):将字节节点流转换为字符节点流。 -
打印流(
PrintStram、PringWriter
): 是输出信息最为方便的流,可以用print型方法集格式化输出任何类型的一串数据。PrintStream
和PrintWriter
的区别:PringStream
出现的较早,System.out
使用的就是PringStream
是实现的。- 二者最大的区别在于
PrintStram
在输出字符,将字符转换为字节时采用系统默认编码格式,跨平台可出现不可控问题。PrintWriter
可以在传入Writer
时OutPutStreamWriter(OutPutstream out,Charset cs)
,自己指定字符编码。非特殊情况建议使用PringWriter
。
节点流
节点流:从数据源构造,根据数据源分为:文件节点流、字节/字符数组节点流、管道节点流、字符串字符流
(1)文件节点流(File[Input/Output]Stream、File[Reader/Writer]
):以文件作为构造输入源
(2)字节/字符节点流(ByteArray[Input/Output]Stream、CharArray[Reader/Writer]
):字节流和字符流分别以字节数组和字符数组作为构造输入源。
(3)管道节点流(Pipe[Input/Output]Stream、Pipe[Reader/Writer]
):以与其它线程共用的管道为构造源。
(4)字符串字符流(String[Reader/Writer]
):以字符串为构造源的字符字节流。