编程软件:IntelliJ IDEA 2018.3 x64
应用环境:JDK1.8
人生名言:感动深受都是说说而已,能靠得住的只有自己。
技术总结:
Java 提供了一种对象**序列化**的机制。用一个字节序列可以表示一个对象,该字节序列包含该`对象的数据`、
`对象的类型`和`对象中存储的属性`等信息。字节序列写出到文件之后,相当于文件中**持久保存**了一个对象的信息。 反之,该字节序列还可以从文件中读取回来,重构对象,对它进行**反序列化**。`对象的数据`、
`对象的类型`和`对象中存储的数据`信息,都可以用来在内存中创建对象。看图理解序列化: 、ObjectOutputStream类 `java.io.ObjectOutputStream ` 类,将Java对象的原始数据类型写出到文件,实现对象的持久存储。 构造方法 - `public ObjectOutputStream(OutputStream out) `: 创建一个指定OutputStream的ObjectOutputStream。
代码展示:
public class Employee implements java.io.Serializable { public String name; public String address; public transient int age; // transient瞬态修饰成员,不会被序列化 public void addressCheck() { System.out.println("Address check : " + name + " -- " + address); } } ``` 2.写出对象方法 - `public final void writeObject (Object obj)` : 将指定的对象写出。 ```java public class SerializeDemo{ public static void main(String [] args) { Employee e = new Employee(); e.name = "zhangsan"; e.address = "beiqinglu"; e.age = 20; try { // 创建序列化流对象 ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("employee.txt")); // 写出对象 out.writeObject(e); // 释放资源 out.close(); fileOut.close(); System.out.println("Serialized data is saved"); // 姓名,地址被序列化,年龄没有被序列化。 } catch(IOException i) { i.printStackTrace(); } } } 反序列化操作1 如果能找到一个对象的class文件,我们可以进行反序列化操作,调用`ObjectInputStream`读取对象的方法: - `public final Object readObject ()` : 读取一个对象。 ```java public class DeserializeDemo { public static void main(String [] args) { Employee e = null; try { // 创建反序列化流 FileInputStream fileIn = new FileInputStream("employee.txt"); ObjectInputStream in = new ObjectInputStream(fileIn); // 读取一个对象 e = (Employee) in.readObject(); // 释放资源 in.close(); fileIn.close(); }catch(IOException i) { // 捕获其他异常 i.printStackTrace(); return; }catch(ClassNotFoundException c) { // 捕获类找不到异常 System.out.println("Employee class not found"); c.printStackTrace(); return; } // 无异常,直接打印输出 System.out.println("Name: " + e.name); // zhangsan System.out.println("Address: " + e.address); // beiqinglu System.out.println("age: " + e.age); // 0 } }
心得:
世上无难事,只怕有心人!