【零基础学java】(IO流进阶)
缓冲流
缓冲流种类
字节缓冲输入流:BufferedlnputStream
字节缓冲输出流:BufferedOutputStream
字符缓冲输入流:BufferedReader
字符缓冲输出流:BufferedWriter
传统写入: 写1字节 → 系统调用 → 磁盘I/O → 返回
缓冲流写入: 写1字节 → 存入缓冲区(内存操作) → ... → 缓冲区满 → 批量写入磁盘

我们从实际数字上来体会缓冲流的作用

为什么缓冲区的大小一般是8192字节而不是越大越好

注意
对于字符流提升不明显,对于字符缓冲流而言关键点是两个特有的方法(字符流底层自带缓冲区)
字符缓冲流两个特有的方法
字符缓冲输入流BufferedReader:readLine()
字符缓冲输出流BufferedWriter:newLine()
缓冲流的分类

字节缓冲流
方法名称说明
public BufferedInputStream(InputStream is)
把基本流包装成高级流,提高读取数据的性能
public BufferedoutputStream(OutputStream os)
把基本流包装成高级流,提高写出数据的性能
原理:底层自带了长度为8192的缓冲区提高性能
字节缓冲输入流

细节:这里的需求是拷贝,所以同时创建了输入输出流,但是关于IO流的创建,并不是看起来那么随意,而是随用随创建,有时创建的时机不正确可能会导致文件中数据清空,因为创建输出流时如果文件存在,会自动清空里面的数据,如果不存在会自动创建
字符缓冲输入流

字符缓冲输入流BufferedReader:readLine(),可以一次读取一整行
字符缓冲输出流BufferedWriter:newLine(),跨平台的换行,不同的系统
转换流
是字符流和字节流之间的桥梁
转换流的名字是
字符转换输入流:InputStreamReader
字符转换输出流:OutputStreamWriter
转换流的作用是
指定字符集读写数据(JDK11之后已淘汰)
字节流想要使用字符流中的方法了


序列化


序列化流的小细节
当要序列化多个对象时,我们可以把对象放到集合中,反序列化时更简洁


使用对象输出流将对象保存到文件时会出现NotSerializableException异常
解决方案:需要让Javabean类实现Serializable接口 。Serializable接口里面是没有抽象方法,标记型接口一旦实现了这个接口,那么就表示当前的Student类可以被序列化

反序列化

序列化流/反序列化流的细节汇总
①使用序列化流将对象写到文件时,需要让Javabean类实现Serializable接口。
否则,会出现NotSerializableException异常
②序列化流写到文件中的数据是不能修改的,一旦修改就无法再次读回来了
序列化流/反序列化流的细节汇总
①使用序列化流将对象写到文件时,需要让Javabean类实现Serializable接口。
否则,会出现NotSerializableException异常
②序列化流写到文件中的数据是不能修改的,一旦修改就无法再次读回来了
③序列化对象后,修改了Javabean类,再次反序列化,会不会有问题?
会出问题,会抛出InvalidclassException异常
解决方案:给Javabean类添加serialversionUID(序列号、版本号)
④如果一个对象中的某个成员变量的值不想被序列化,又该如何实现呢?
解决方案:给该成员变量加transient关键字修饰,
该关键字标记的成员变量不参与序列化过程
打印流
打印流
分类:打印流一般是指:PrintStream,PrintWriter两个类
特点1:打印流只操作文件目的地,不操作数据源
特点2:特有的写出方法可以实现,数据原样写出
例如:打印:97 文件中:97
特点3:特有的写出方法可以实现自动刷新,自动换行
打印一次数据=写出+换行+刷新
字节打印流


字符打印流

打印流与输出语句
//获取打印流的对象,此打印流在虚拟机启动的时候,由虚拟机创建,默认指向控制台
//特殊的打印流,系统中的标准输出流,是不能关闭,在系统中是唯一的。
压缩流


压缩本质:把每一个(文件/文件夹)看成ZipEntry对象放到压缩包中
Hutool
这里我们介绍一个工具包,大大提高了代码的书写效率
https://repo1.maven.org/maven2/cn/hutool/hutool-all/5.8.16/hutool-all-5.8.16.jar
下载链接附上
之后我们导入库中,就可以使用了
使用时可以参考一下链接
官网:
https://hutool.cn/
API文档:
https://apidoc.gitee.com/dromara/hutool/
中文使用文档:
https://hutool.cn/docs/#/