乐趣区

关于java:Java-IO总结

字节流:

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

退出移动版