
学完基础的字节、字符流第八章后半段的内容更偏向实际开发里的实用功能包括 Path 和 Files、通道缓冲区读写还有对象序列化这几个点单独拿出来说说。传统 IO 是 BIO一个请求一个流读写是阻塞的写起来简单但处理大量文件的时候效率一般。Java NIO 里的 Path、Files 工具类是新版本提供的简化方案不用我们自己手动循环读写字节很多常用操作比如判断文件、创建目录、读取全部行、复制移动文件一行方法调用就能搞定。书上案例的文件夹深度复制如果只用老式 File 字节流要自己写递归遍历文件夹判断是文件还是子目录代码很长用 Files 搭配 Path代码精简不少。然后是序列化这个概念一开始我理解了好久。序列化简单说就是把内存里的 Java 对象变成一串字节数据保存到文件或者通过网络传输反序列化就是把这串字节再还原成原来的对象。不是所有类都能序列化类需要实现 Serializable 这个标记接口这个接口里面没有任何抽象方法相当于给这个类贴一个 “可以序列化” 的标签。书上的学生对象序列化案例印象很深创建 Student 类实现 Serializable用 ObjectOutputStream 把对象写入文件再用 ObjectInputStream 读回来还原 Student 对象。这里有个需要留意的细节如果类里面有不想被序列化保存的成员变量可以加上 transient 关键字序列化的时候这个字段就会被忽略不会被持久化。这里我踩过一个坑修改了实体类之后再去反序列化旧文件里的对象经常报异常。因为序列化会自动生成 serialVersionUID类结构一改版本号就变了和文件里的版本对不上就报错。稳妥的做法是我们自己手动写死 serialVersionUID固定版本。也放一段序列化的简短示例import java.io.*; class Student implements Serializable { private static final long serialVersionUID 1L; private String name; private int age; public Student(String name, int age) { this.name name; this.age age; } Override public String toString() { return Student{name name , age age }; } } public class SerialDemo { public static void main(String[] args) throws IOException, ClassNotFoundException { //序列化 ObjectOutputStream oos new ObjectOutputStream(new FileOutputStream(stu.dat)); oos.writeObject(new Student(张三, 19)); oos.close(); //反序列化 ObjectInputStream ois new ObjectInputStream(new FileInputStream(stu.dat)); Student s (Student) ois.readObject(); System.out.println(s); ois.close(); } }总的来说第八章 IO 处理分成两大块基础 IO 用来理解流的本质适合简单的文件读写NIO 工具类和序列化偏向工程使用。做小工具、数据持久化、网络传输对象的时候序列化是很常用的手段。IO 是 Java 里很重要的一块后面学网络编程也离不开流这块一定要练熟。