2022-08-09 第三组 陈迪 学习笔记
IO流:(输入输出流)
File类不能操作文件内容
1、按照流向分
输入流:从硬盘中读取数据到内存
输出流:从内存写出数据到硬盘
一个文件在传输过程中经历了多次的复制粘贴
IO性能本身就很低,零拷贝,NIO附加题!!
2、按照操作单元分:
字节流:是一个字节一个字节的操作,二进制操作,操作任意类型的文件。
字符流:是一个字符一个字符的操作。一个字符两个字节,主要用来处理文本文件(只能有文字).txt,.java, .py,
3、按照角色划分:
节点流:直接操作一个特定的IO设备
处理流:在节点流的基础上,做进一步的处理。
Java中输入/输出流常用的流:
字节输入流 字节输出流 字符输入流 字符输出流
InputStream OutputStream Reader Writer 抽象基类
FileInputStream FileOutputStream FileReader FileWriter 访问流
BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter 缓冲流
ObjectInputStream ObjectOutputStream ObjectReader ObjectWriter
流到底怎么用?
输入流:就是一点一点的往内存中读数据。
字节输入流:
1、创建一个FileInputStream对象
2、定义一个标记,用来控制输入流的读取
3、循环读取,如果到了-1,说明到了末尾,循环结束
4、关闭资源
注意:第一个流读完了就没有了
当一个流读完会默认调用mark和rest方法记录和重置
这个流就重置到了上次读完的位置,所以就无法再次读取内容,并不是关闭了流
缓冲流是一个处理流:
外层流,内层流,如果关闭了外层流,内层流也会随之关闭。
序列化与反序列化:操作对象
序列化:将对象写入IO流中,将内存模型的对象变成字节数字,可以进行存储和传输
反序列化:从IO流中恢复对象,将存储在硬盘上或者从网络中接收的数据恢复成对象模型。
Serializable序列化接口
序列化版本号:
反序列化必须拥有class文件,但随着项目升级,class文件也会升级。
序列化保证升级前后的兼容性。
java序列化提供了一个版本号
版本号可以自由指定,如果不指定,JVM会根据类信息自己计算一个版本号
所以无法匹配,报错
不指定版本号,不利于JVM移植,
如果只修改方法,反序列化不受影响,无需修改版本号
修改了静态变量static,顺泰变量transient,反序列化也不受影响,无需修改版本号
总结:
1、所有需要网络传输的对象都需要实现序列化接口
2、对象的类名,实例变量都会被序列化:方法,类变量,transient变量不会被序列化
3、如果想让某个变量不被序列化,可以用transient修饰
4、序列化对象的引用类型

心得体会
昨天学习了IO流,由于作业写完的太晚,所以今天又重新思考了一下,把老师给的题自己独立做了一遍,虽然过程还是会卡,但是理解了好多了。

浙公网安备 33010602011771号