JAVA教程 从入门到精通 Day16

第十章 IO流

10.1 IO流分类

IO流: 数据的读入写出 文件的上传下载

流: 一连串流动的数据 以先入先出的方式进行传输 ==> 流就是管道

数据源---->io---->目的地

数据源 : 数据的来源

目的地 : 数据流向的位置

  • 流的分类:
    • 按操作单元分:
      • 字节流 : 万能流 ★★★
      • 字符流 : 纯文本内容
    • 按流向分:以程序为中心
      • 输入流
      • 输出流
    • 按功能分:
      • 节点流 : 真实能做读入写出的
      • 功能流 : 增强节点流的功能,提高节点流的性能

注:

流之间的分类是相辅相成的

10.2 字节输入流

InputStream是字节输入流中最上层父类

  • 文件流 : FileInputStream 文件字节输入流 ==> 节点流 字节流 输入流

    ​ 操作文件 ,数据源为文件 ==> 使用文件字节输入流

  • 字节数组流 : ByteArrayInputStream 字节数组输入流 ==> 节点流 字节流 输入流

    ​ 操作字节数组 ,数据源是字节输入 ==> 使用字节数组输入流

10.3 字节输出流

OutputStream是字节输入流中最上层父类

  • **文件流:**FileOutputStream 文件字节输出流 -> 节点流

    ​ 目的地为文件

  • **字节数组流:**ByteArrayOutputStream 字节数组输出流 -> 节点流

    ​ 目的地为字节数组

注意:

在输出流写出的时候,如果目的地文件不存在,系统会自动创建目的地文件,如果目的地文件所在路径不存在,抛

出异常

java.io.FileNotFoundException:(系统找不到指定的路径)

10.4 字节流实现文件拷贝

★★★

数据源 ==> 输入流 ==> 程序 ==> 输出流 ==> 目的地

  • 步骤:

    1.构建流(输入流 输出流)

    2.读入写出

    3.刷出

    4.关闭 (后打开的先关闭)

10.5 字符流实现文件拷贝

字符流 (纯文本数据)

  • Reader 字符输入流

    • FileReader 文件字符输入流 ==> 节点流
  • Writer 字符输出流

    • FileWriter 文件字符输出流 ==> 节点流
  • 步骤和字节流相同

10.6 字节缓冲流

功能流:使用:包裹节点流使用

缓冲流 Buffered:加快节点流的读写效率

  • 字节缓冲流 :
    • 字节输入缓冲流 BufferedInputStream
    • 字节输出缓冲流 BufferedOutputStream

无新增方法,可以发生多态

10.7 字符缓冲流

  • 字符输入缓冲流 BufferedReader
    • 新增功能: String readLine() 读一行文字
  • 字符输出缓冲流 BufferedWriter
    • 新增功能: void newLine() 写一个行分隔符

存在新增功能,不能发生多态

10.8 Date流

功能流 :

Data流 | 基本数据类型流 : 读写数据+保留数据类型 ==> 基本数据类型|字符串 【是字节流的功能流】

  • DataInputStream Data输入流

    • 新增功能 : readXxx()
  • DataOutputStream Data输出流

    • 新增功能 : writeXxx()

注意:

读入与写出的顺序保持一致

读入数据的时候必须从源文件中读入,否则抛出异常 java.io.EOFException

10.9 Object流

又叫对象流|引用数据类型流

字节流的功能流

  • ObjectInputStream 反序列化输入流

    • 新增方法 Object readObject( ) 从ObjectInputStream中读取一个对象
  • ObjectOutputStream 序列化输出流

    • 新增方法 void writeObject(Object obj) 将指定的对象写入ObjectOutputStream

10.10序列号

**序列化:**将对象数据转为可存储或者可传输的状态的过程

注:

  • 不是所有类型的数据都能序列化 java.io.Serializable
  • 如果写出的对象类型没有实现序列化接口,会遇到运行时异常java.io.NotSerializableException
  • 序列化与反序列化顺序保持一致
  • 不是所有的属性都需要序列化 transient
  • static的成员不会被序列化
  • 如果父类实现类序列化接口,子类所有内容都可以进行序列化
  • 子类实现了序列化接口,只能序列化子类独有的内容

**序列号:**当实现了序列化的类型默认存在一个序列号

注:

  • 当类中的成员发生改变,序列号默认会重新生成

作用:

  • 使用序列号可以实现检查前后版本不一致问题

解决不同版本的兼容问题:

  • 手动设置序列号

通过快捷键生成序列号:

  1. 类型必须实现了序列化接口

  2. Setting中进行配置

  3. 双击类名alt+enter,自动生成序列号

10.11CommonsIO

CommonsIO是apache的一个开源的工具包,封装了IO操作的相关类,使用Commons IO可以很方便的读写文

件,url源代码等

是一个第三方的开源组件

使用第三方组件的步骤:

​ 1.对应官网中下载源码 jar

​ 2.在项目下新建一个文件夹目录lib,lib下存放以后项目所依赖的所有jar包

​ 3.选中jar包,右键add as lib…

​ 4.在项目下对应类中进行使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值