1

image

字节流:

以字节为单位,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使用


Severus
10 声望0 粉丝

« 上一篇
Java SE 包装类
下一篇 »
JavaSE 多态