image.png

IO流的概念

  • IO就是Input和Output的简写,也就是输入和输出的含义。
  • IO流就是指读写数据时像流水一样从一端流到另外一端,因此得名为“流”。

IO的分类

  • 按照读写数据的基本单位不同,分为字节流字符流

其中字节流主要指以字节为单位进行数据读写的流,可以读写任意类型的文件。
其中字符流主要指以字符(2个字节)为单位进行数据读写的流,只能读写文本文件。

  • 按照读写数据的方向不同,分为输入流输出流(站在程序的角度)。

其中输入流主要指从文件中读取数据内容输入到程序中,也就是读文件。
其中输出流主要指将程序中的数据内容输出到文件中,也就是写文件。

  • 按照流的角色不同分为节点流处理流

其中节点流主要指直接和输入输出源对接的流。
其中处理流主要指需要建立在节点流的基础之上的流

IO体系结构

屏幕快照 2021-11-18 10.18.16 PM.png

相关流讲解

FileWriter类

基本概念

  • java.io.FileWriter类主要用于将文本内容写入到文本文件。

    常用方法

    image.png

FileReader类

基本概念

  • 主要用于从文本文件中读取数据内容

    常用方法

    image.png

    FileOutputStreaming

    基本概念

  • java.io.FileOutputStream类主要用于将图像数据之类的原始字节流写入到输出流中

    常用方法

    image.png

FileInputStream

基本概念

  • java.io.FileInputStream类主要用于从输入流中以字节流的方式读取图像数据等。常用的方法

常用的方法

image.png

BufferedOutputStream

基本概念

  • java.io.BufffferedOutputStream类主要用于描述缓冲输出流,此时不用为写入的每个字节调用底层

系统。

常用的方法

image.png

BufffferedInputStream类

基本概念

  • java.io.BufffferedInputStream类主要用于描述缓冲输入流。

    常用方法

image.png

BufferedWriter

基本概念

  • java.io.BufffferedWriter类主要用于写入单个字符、字符数组以及字符串到输出流中。

    常用方法

    image.png

    BufferedReader

    基本概念

  • java.io.BufffferedReader类用于从输入流中读取单个字符、字符数组以及字符串。

    常用方法

    image.png

    ObjectOutputStream

    基本概念

  • java.io.ObjectOutputStream类主要用于将一个对象的所有内容整体写入到输出流中。

  • 只能将支持 java.io.Serializable 接口的对象写入流中。
  • 类通过实现 java.io.Serializable 接口以启用其序列化功能。
  • 所谓序列化主要指将一个对象需要存储的相关信息有效组织成字节序列的转化过程。

    常用的方法

    image.png

ObjectInputStream

基本概念

  • java.io.ObjectInputStream类主要用于从输入流中一次性将对象整体读取出来。
  • 所谓反序列化主要指将有效组织的字节序列恢复为一个对象及相关信息的转化过程。

    常用的方法

    image.png

特别讲解

序列化版本号

序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常(InvalidCastException)。

transient关键字

transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。

经验的分享

当希望将多个对象写入文件时,通常建议将多个对象放入一个集合中,然后将集合这个整体看做一个对象写入输出流中,此时只需要调用一次readObject

其他

  1. 快捷生成try catch finally使用 ctrl+alt+t