Day21-IO
- IO
1.1 数据流
数据流有两个类:(用于读取和写出 基本数据类型、String类的数据)
DataOutputStream按照一定的格式输出,再通过DataInputStream以一定格式读入。
在通过协议传输的信息的网络上是非常适用。
输入要和输出的顺序一致
DataInputStream 和 DataOutputStream分别“套接”在 InputStream 和 OutputStream 子类的流上。
1.2 对象流
- 创建对象的4种方式
-
1 new 用的最多
-
2 反射机制
-
3 反序列化
-
4 clone 不用了,被序列化代替 , Object.clone()
硬盘中的数据是可以持久化的(长期保存) , 但是内存中不同(短期),比如关机之后 就没了。
序列化技术----------------把对象持久化保存到硬盘
- 序列化 : 把对象保存到硬盘中,可以持久化存储 ObjectOutputStream
- 反序列化 : 把硬盘中的对象文件,载入到内存中 ObjectInputStream
要被序列化的对象所在的类,必须实现Serializable接口,该接口中没有任何方法,仅仅是一种标记,以被编译器做特殊的处理
- 序列化目的 : 1 长时间存储对象 2 对象传递
应用场景 : -
序列化就是将数据对象转换为二进制流,从而能够进行数据持久化和网络传输的过程
-
如果对象不进行序列化操作,那么就没有办法存储和传输
-
反序列化就是序列化的逆向处理过程
-
传递过程 :
-
数据对象--> 序列化-->二进制流--> 加密处理--> 网络传输 --> 数据解密--> 反序列化--> 数据对象
1.2.1 serualVersionUID
如果不加UID,每次更改User类,都需要重新序列化,否则反序列化会报错
加上该常量后,更改类,不需要重新序列化 直接反序列化也是可以用的
1.2.2 Transient
* transient 使用该修饰符修饰,则该属性不会被序列化
* 当反序列化的时候,再访问该属性,就是对应数据类型的默认值
1.3 File
java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关
File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。
如果需要访问文件内容本身,则需要使用输入/输出流。
想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对 象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。
File对象可以作为参数传递给流的构造器
1.3.1 构造方法
public File(String pathname)以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。
public File(String parent,String child)以parent为父路径,child为子路径创建File对象。
public File(File parent,String child)根据一个父File对象和子文件路径创建File对象
1.3.2 路径使用
路径中的每级目录之间用一个路径分隔符隔开。
路径分隔符和系统有关:
windows和DOS系统默认使用“\”来表示
UNIX和URL使用“/”来表示
Java程序支持跨平台运行,因此路径分隔符要慎用。
为了解决这个隐患,File类提供了一个常量:public static final String separator。根据操作系统,动态的提供分隔符
举例:
File file1 = new File(“d:\shangyun\info.txt”);
File file2 = new File(“d:” + File.separator + " shangyun " + File.separator + “info.txt”);
File file3 = new File("d:/ shangyun ");
1.3.3 练习 : 复制目录
复制文件夹
1.3.3.1 思路
-
1 文件复制 : 本质就是输入和输出
-
a 完成文件输入
-
b 完成文件输出
-
c 整合输入和输出 完成文件复制
-
2 获取目录下所有子目录
-
a 获取目录对象
-
b 获取目录下所有直接子目录
-
c 获取目录下所有后代目录(子 : 父子关系,后代 : 长辈关系,比如爷爷和孙子属于后代不属于子)
-
3 整合所有后代目录,和文件复制
-
a 获取所有后代目录后,得到每一个后代文件对象
-
b 通过文件对象可以获取文件的全路径
-
c 通过全路径,就可以创建输入流
-
d 然后创建输出流输出
一 完成后,封装。高内聚,低耦合。
快速判断入参出参方法 字面量一般作为你的入参。 打印到控制台的一般作为出参。