欢迎光临散文网 会员登陆 & 注册

Java IO流-高级流

2023-03-03 23:02 作者:回到唐朝当少爷  | 我要投稿

IO流 高级流

缓冲流分为字节缓冲流与字符缓冲流

字节缓冲流分为BufferedInputStream(字节缓冲输入流)和BufferedOutputStream(字节缓冲输出流)

字符缓冲流分为BufferedReader(字符缓冲输入流)与BufferedWriter(字符缓冲输出流)

字节缓冲流

原理:底层自带了长度为9182的缓冲区提高性能

例:一次拷贝一个字节

例:一次拷贝多个字节

字符缓冲流

原理:底层自带了长度为8192的缓冲区提高性能

字符缓冲流的特有方法

readLine方法在读取的时候,一次读一整行,遇到回车换行结束,但是它不会把回车换行读到内存中

缓冲流为什么能提高性能?

  • 缓冲流自带长度为8192的缓冲区

  • 可以显著提高字节流的读写性能

  • 对于字符流提升不明显,对于字符缓冲流关键点是两个特有的方法readLine()与newLine()

注意,文件流最好随用随创建,什么时候不用什么时候关闭

转换流

转换输入流(InputStreamReader)

转换输出流(OutputStreamWriter)

JDK11后

转换流的作用:字节流想使用字符流中的方法

例:利用字节流读取文件中的数据,每次读一整行不出现乱码

序列化流

ObjectOutputStream(序列化流)可以把Java中的对象写到本地文件中

小细节:使用对象输出流将对象保存到文件时会出现NoteSerializableException异常 解决方案:让Javabean类实现Serializable接口

Serializable接口没有抽象方法(标记型接口)

反序列化流

ObjectInputStream(反序列化流)可以把序列化到本地文件中的对象读取到程序中来

如果序列号不一样会报错

解决方案1:在类里面这样定义

解决方案2:在IDEA里面设置自动产生序列号

transient瞬态关键字:不会把当前属性序列序列化到本地文件中

序列化流与反序列化流细节

  1. 使用序列化流将对象写到文件时,需要让Javabean类实现Serializable接口,否则会出现NotSerializableException异常

  2. 序列化流写到文件中的数据是不能修改的,一旦修改就无法再次读回来了

  3. 序列化对象后,修改了Javabean类,再次反序列化会出问题:InvalidClassVersionUID(序列号版本号)

  4. 如果一个对象中的某个成员变量的值不想被序列化,可以加transient关键字修饰,该关键字标记的成员变量不参与序列化过程

打印流

分类:一般指PrintStream,PrintWriter两个类

  • 特点1:打印流只操作2文件目的地,不操作数据源

  • 特点2:特有的写出方法可以实现数据原样写出 如:打印97   文件中:97   打印true 文件中:true

  • 特点3:特有的写出方法可以实现自动刷新,自动换行 打印一次数据=写出+换行+刷新

字节打印流

字节流底层没有缓冲区,开不开自动刷新都一样

字符打印流

字符流底层有缓冲区,想要自动刷新需开启

成员方法与字节打印流一样

打印流的应用场景

  • 字节打印流:默认自动刷新

  • 字符打印流:自动刷新需要开启

解压缩流

关键:压缩包里的每一个文件或文件夹都是一个ZipEntry对象

压缩流

压缩本质:把每一个(文件/文件夹)看成ZipEntry对象放到压缩包中

例:压缩一个文件

Commos-io

Commos-io是apache开源基金组织提供的一组有关IO操作的开源工具包

作用:提高IO流的开发效率

Apache:专门为支持开源软件项目而办的一个非盈利性组织,成立于1999年,总部在美国马里兰州

使用步骤:

  1. 在项目中创建一个文件夹lib

  2. 将jar包复制粘贴到lib文件夹

  3. 右键点击jar包,选择Add as Library->OK

  4. 在类中导包使用

[hutool](入门和安装 (hutool.cn): https://hutool.cn/docs/#/)国产Java工具包


Java IO流-高级流的评论 (共 条)

分享到微博请遵守国家法律