字节流:
以字节为单位,8 位, 可拜访 所有类型文件 , 在写入时实际上是将byte 中的二进制数据 写入文件(即便为 byte 赋值 65, 也是将 65 转成一串二进制数据, 而后写入, 因为所有流都是读写二进制数据)
字符流:
以字符为单位,16 位 Unicode, 只可拜访 文本文件.
(因为间接应用字节流时,输入流会要求将数据转成二进制数据 (即 byte 类型), 在读取时又只能 读取到 byte 类型 , 如果要 还原到原始类型则须要手动转换, 同时可能产生读取的 byte 不足以转换为一个字符(一些字符须要多个字节), 此时会产生乱码. 所以对于字符类型, 将相应操作封装起来, 建设字符流的输出 / 输入)
(字符流防止了 “ 读一半 ” 的状况,读 / 写编码表不对立 的状况仍需其余操作进行解决)
字节流
FileInputStream 和 FileOutputStream
获取文件的输出流或输入流, 实现对任意文件的读写
特点:
- 应用时只须要对应文件的 File 或者门路.
- 通常作为其余 OutputStream 和 InputStream 的参数.
FilterInputStream 和 FilterOutputStream
过滤器输出流和过滤器输入流, 为根底的输出流和输入流减少其余性能. 有多种不同性能的子类
DataIntputStream
数据输出流容许应用程序以与机器无关形式从底层输出流中读取 根本 Java 数据类型。
DataOutputStream
数据输入流容许应用程序以适当形式将 根本 Java 数据类型 写入输入流中。
特点:
- 读取时读取指定位长的二进制数据, 而后转换为对应根本类型
- 写入时先将数据转换为指定位长的二进制数据, 而后再写入
- 应用时须要与其余 OutputStream 和 InputStream 组合应用.
(因为其余字节流只能读写字节和字节数组, 例如其余输入流写入 65 时, 文件中显示的是 A)
BufferedInputStream 和 BufferedOutputStream
特点:
- 在内存中设置肯定大小的数组作为缓冲区, 在读 / 写时先填充缓冲区, 防止屡次读 / 写时频繁与硬盘交互.
- 应用时须要与其余 OutputStream 和 InputStream 组合应用.
PushbackInputStream
特点:
- 为另一个输出流增加性能,即“推回 (push back)”或“ 勾销读取 (unread)”一个字节的能力。
- 在读取终止字节后,代码片段能够“勾销读取”该字节,这样,输出流上的下一个读取操作将会从新读取被推回的字节。
- 应用时须要与其余 InputStream 组合应用.
PrintStream
特点:
- PrintStream 配合其余输入流可能不便地 打印各种数据值示意模式 , 即能够调整 数据的排版.
- 应用时能够应用对应文件的 File 或者门路.
- 也能够与其余 OutputStream 和 InputStream 组合应用.
ObjectInputStream 和 ObjectOutputStream
特点:
- 能够读 / 写曾经 序列化的类的对象 .(同时也能够读写 根本数据类型)
- 通过在流中 应用文件能够实现对象的长久存储。如果流是网络套接字流,则能够在另一台主机上或另一个过程中重构对象。
- 应用时须要与其余 OutputStream 和 InputStream 组合应用.
-
- *
PipedOutputStream 和 PipedInputStream
管道输入流和管道输出流。
特点:
- 让 多线程 能够通过管道进行线程间的通信。在应用管道通信时,必须将 PipedOutputStream 和 PipedInputStream配套应用。
- 应用管道通信时,大抵的流程是:在线程 A 中向 PipedOutputStream 中写入数据,这些数据会主动的发送到与 PipedOutputStream 对应的 PipedInputStream 中,进而存储在 PipedInputStream 的缓冲中;此时,线程 B 通过读取 PipedInputStream 中的数据。就能够实现,线程 A 和线程 B 的通信。
ByteArrayInputStream 和 ByteArrayOutputStream
内存输出流和内存输入流
在内存中设置肯定长度的数组作为缓冲区
特点:
- ByteArrayOutputStream 在向缓冲区写入数据时, 当缓冲区已满载则缓冲区主动减少长度.
- 次要是为了 长期解决数据 应用.
- 无奈与其余输出流和输入流配合应用.
SequenceInputStream
特点:
将 多个输出流合并为一个输出流, 在读入时, 以后输出流读入结束主动转入下一个输出流进行读取
字符流
BufferedReader 和 BufferedWriter
组合其余 Reader 和 Writer 应用
能够读取一行
InputStreamReader 和 OutputStreamWriter
转换流, 将 字节流装璜为字符流
InputStreamReader 是字节流通向字符流的桥梁
OutputStreamWriter 是字符流通向字节流的桥梁
在结构时须要 InputStream 和 OutputStream
FileReader 和 FileWriter
StringReader 和 StringWriter
相似 ByteArrayInputStream 和 ByteArrayOutputStream, 然而 缓冲区是一个 String
PipedReader 和 PipedWriter
CharArrayReader 和 CharArrayReader
相似 ByteArrayInputStream 和 ByteArrayOutputStream, 然而缓冲区是一个char[]
PushbackReader
减少 推回, 组合其余 Reader 应用