什么是 IO

  • Java 中 I/O 操作主要是指使用java.io包下的内容,进行输入、输出操作
  • 输入也叫做读取数据,输出也叫做作写出数据

IO 的分类

根据数据的流向分为:输入流输出流

  • 输入流 :把数据从其他设备上读取到内存中的流
    • 以 InputStream、Reader结 尾
  • 输出流 :把数据从内存 中写出到其他设备上的流
    • 以 OutputStream、Writer 结尾

根据数据的类型分为:字节流字符流

  • 字节流 :以字节为单位,读写数据的流
    • 以 InputStream、OutputStream 结尾
  • 字符流 :以字符为单位,读写数据的流
    • 以 Reader、Writer 结尾

根据IO流的角色不同分为:节点流处理流

  • 节点流:可以从或向一个特定的地方(节点)读写数据
  • 处理流:是对一个已存在的流进行连接和封装,通过所封装的流的功能调用实现数据读写;处理流的构造方法总是要带一个其他的流对象做参数,一个流对象经过其他流的多次包装,称为流的链接

这种设计是装饰模式(Decorator Pattern)也称为包装模式(Wrapper Pattern),其使用一种对客户端透明的方式来动态地扩展对象的功能,它是通过继承扩展功能的替代方案之一在现实生活中你也有很多装饰者的例子,例如:人需要各种各样的衣着,不管你穿着怎样,但是,对于你个人本质来说是不变的,充其量只是在外面加上了一些装饰,有,“遮羞的”、“保暖的”、“好看的”、“防雨的”….

常用的节点流

对文件进行处理的节点流

  • FileInputStream
  • FileOutputStrean
  • FileReader
  • FileWriter

对字符串进行处理的节点流

  • StringReader
  • StringWriter

对数组进行处理的节点流

对应的不再是文件,而是内存中的一个数组

  • ByteArrayInputStream
  • ByteArrayOutputStream
  • CharArrayReader
  • CharArrayWriter

对管道进行处理的节点流

  • PipedInputStream
  • PipedOutputStream
  • PipedReader
  • PipedWriter

常用处理流

缓冲流

增加缓冲功能,避免频繁读写硬盘

  • BufferedInputStream
  • BufferedOutputStream
  • BufferedReader
  • BufferedWriter

转换流

实现字节流和字符流之间的转换

  • InputStreamReader
  • OutputStreamReader

数据流

提供读写 Java 基础数据类型功能

  • DataInputStream
  • DataOutputStream

对象流

提供直接读写Java对象功能

  • ObjectInputStream
  • ObjectOutputStream

4 大顶级抽象父类们

输入流 输出流
字节流 字节输入流 InputStream 字节输出流 OutputStream
字符流 字符输入流 Reader 字符输出流 Writer