IO流
[内容时间:2021.08.24]
Java IO流四大类
四大家族的首领
java.io.InputStream //字节输入流 java.io.OutputStream //字节输出流 java.io.Reader //字符输入流 java.io.Writer //字符输出流
需要学习的流
java.io包下需要掌握的流有16个:
//文件专属: java.io.FileInputStream(掌握) java.io.FileOutputStream(掌握) java.io.FileReader java.io.FileWriter //转换流:(将字节流转换成字符流) java.io.InputStreamReader java.io.OutputStreamWriter //缓冲流专属: java.io.BufferedReader java.io.BufferedWriter java.io.BufferedInputStream java.io.BufferedOutputStream //数据流专属: java.io.DataInputStream java.io.DataOutputStream //标准输出流: java.io.PrintWriter java.io.PrintStream(掌握) //对象专属流: java.io.ObjectInputStream(掌握) java.io.ObjectOutputStream(掌握)
Object对象流
序列化和反序列化
序列化
若要将一个对象输出到硬盘保存,则需要将对象“拆分”成一块块,按顺序放入硬盘。(因为有的对象太大所以不能一次性输出 于是有了序列化)
对象在序列化时要实现一个Serializable 接口,JVM会给这个对象自动生成一个序列版本号
注意一下, 带有transient 的变量不参与序列化。
反序列化
将程序重新输入回内存。
若原对象的源代码在序列化之后有过改动,则不能反序列化回到内存。因为重新改动代码编译过的对象,JVM会重新给这个对象分配一个全新的序列号。序列号不同,无法反序列化。
所以这时我们需要手动去给此对象手写一个序列号。
建议手动把序列版本号写出来,这样改代码,以后这个对象反序列化还能编译通过
private static final long serialVersionUID = 数字L(长整型long类型)
文件夹的复制
IO + Properties 的联合使用
非常好的一个设计理念:
以后经常改变的数据,可以单独写到一个文件中,使用程序动态读取。将来只需要修改这个文件的内容,Java代码不需要改动,不需要重新编译,服务器也不需要重启,就可以拿到动态的信息
类似以上机制的这种文件被称为配置文件
并且当配置文件的内容格式是:
- key1=value 冒号 : 也可以隔开,不建议
- key2=value 这个格式最好不要有空格 在框架做项目如果呆空格可能会出问题
的时候,我们把这种配置文件叫做属性配置文件
java规范中有要求:属性配置文件建议以 .properties结尾,但不是必须的
这种以 .properties结尾的文件在java中被称为属性配置文件
其中Properties是专门存放属性配置文件内容的一个类
属性配置文件中,#井号是注释
key重复的话,value自动覆盖。文件中也会有红色下划线(IDEA太强大了!)