字节流:

以字节为单位,8位,可拜访所有类型文件,在写入时实际上是将byte中的二进制数据写入文件(即便为byte赋值65,也是将65转成一串二进制数据,而后写入,因为所有流都是读写二进制数据)

字符流:

以字符为单位,16位Unicode,只可拜访文本文件.

(因为间接应用字节流时,输入流会要求将数据转成二进制数据(即byte类型),在读取时又只能读取到byte类型,如果要还原到原始类型则须要手动转换,同时可能产生读取的byte不足以转换为一个字符(一些字符须要多个字节),此时会产生乱码.所以对于字符类型,将相应操作封装起来,建设字符流的输出/输入)

(字符流防止了"读一半"的状况,读/写编码表不对立的状况仍需其余操作进行解决)


字节流

FileInputStream和FileOutputStream

获取文件的输出流或输入流,实现对任意文件的读写

特点:

  1. 应用时只须要对应文件的File或者门路.
  2. 通常作为其余OutputStream和InputStream的参数.

FilterInputStream和FilterOutputStream

过滤器输出流和过滤器输入流,为根底的输出流和输入流减少其余性能.有多种不同性能的子类


DataIntputStream

数据输出流容许应用程序以与机器无关形式从底层输出流中读取根本 Java 数据类型

DataOutputStream

数据输入流容许应用程序以适当形式将根本Java数据类型写入输入流中。

特点:

  1. 读取时读取指定位长的二进制数据,而后转换为对应根本类型
  2. 写入时先将数据转换为指定位长的二进制数据,而后再写入
  3. 应用时须要与其余OutputStream和InputStream组合应用.

(因为其余字节流只能读写字节和字节数组,例如其余输入流写入65时,文件中显示的是A)


BufferedInputStream和BufferedOutputStream

特点:

  1. 在内存中设置肯定大小的数组作为缓冲区,在读/写时先填充缓冲区,防止屡次读/写时频繁与硬盘交互.
  2. 应用时须要与其余OutputStream和InputStream组合应用.

PushbackInputStream

特点:

  1. 为另一个输出流增加性能,即“推回 (push back)”或“勾销读取 (unread)”一个字节的能力。
  2. 在读取终止字节后,代码片段能够“勾销读取”该字节,这样,输出流上的下一个读取操作将会从新读取被推回的字节。
  3. 应用时须要与其余InputStream组合应用.

PrintStream

特点:

  1. PrintStream配合其余输入流可能不便地打印各种数据值示意模式,即能够调整数据的排版.
  2. 应用时能够应用对应文件的File或者门路.
  3. 也能够与其余OutputStream和InputStream组合应用.

ObjectInputStream和ObjectOutputStream

特点:

  1. 能够读/写曾经序列化的类的对象.(同时也能够读写根本数据类型)
  2. 通过在流中应用文件能够实现对象的长久存储。如果流是网络套接字流,则能够在另一台主机上或另一个过程中重构对象。
  3. 应用时须要与其余OutputStream和InputStream组合应用.
    • *

PipedOutputStream和PipedInputStream
管道输入流和管道输出流。

特点:

  1. 多线程能够通过管道进行线程间的通信。在应用管道通信时,必须将PipedOutputStream和PipedInputStream配套应用
  2. 应用管道通信时,大抵的流程是:在线程A中向PipedOutputStream中写入数据,这些数据会主动的发送到与PipedOutputStream对应的PipedInputStream中,进而存储在PipedInputStream的缓冲中;此时,线程B通过读取PipedInputStream中的数据。就能够实现,线程A和线程B的通信。

ByteArrayInputStream和ByteArrayOutputStream

内存输出流和内存输入流

在内存中设置肯定长度的数组作为缓冲区

特点:

  1. ByteArrayOutputStream在向缓冲区写入数据时,当缓冲区已满载则缓冲区主动减少长度.
  2. 次要是为了长期解决数据应用.
  3. 无奈与其余输出流和输入流配合应用.

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应用