Java实现序列化作用及实例
(一)序列化作用:
把内存中的对象转化为另一种形式,以供传输或存储。
(二)序列化前提:
(1)要序列化对象必须是可序列化的,即必须实现?Serializable?接口。
(2)要序列化对象的属性也都是可序列化的。
(3)要序列化对象引用的对象也必须是可序列化的,如:要序列化一个 HashMap 实例,需要把放入到HashMap中的对象也都序列化。
(4)要序列化一个内部类,该内部类必须可序列化,并且外部类也必须可序列化。
(5)基本数据类型都是可以序列化的。
(三)序列化举例:
下面是一个User类,演示了把一个User实例写入文件,然后在再文件中读出。
package serialize;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;public class User implements Serializable { private static final long serialVersionUID = 2143L; private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public User(String name, int age) { this.name = name; this.age = age; } /** * @todo 将一个可以序列化的对象写入文件 * @param obj * 要保存的对象 * @param fileName * 目标文件 */ public void writeToFile(Object obj, String fileName) { ObjectOutputStream oos = null; FileOutputStream fos = null; try { fos = new FileOutputStream(fileName); oos = new ObjectOutputStream(fos); oos.writeObject(obj); oos.flush(); System.out.println("write ok!"); } catch (Exception e) { System.out.println("write false! The error : " + e.getStackTrace()); } finally { //关闭文件流 try { if (oos != null) { oos.close(); } if(fos != null){ fos.close(); } } catch (IOException e) { System.out.println("close flus false! The error : " + e.getStackTrace()); } } } /** * @param fileName * 保存对象的文件 * @return 从文件中得到的对象 */ public Object getObjFromFile(String fileName) { Object obj = null; FileInputStream fis = null; ObjectInputStream ois = null; try { fis = new FileInputStream(fileName); ois = new ObjectInputStream(fis); obj = ois.readObject(); ois.close(); System.out.println("read ok!"); } catch (Exception e) { e.printStackTrace(); } finally { //关闭文件流 try { if (ois != null) { ois.close(); } if(fis != null){ fis.close(); } } catch (IOException e) { System.out.println("close flus false! The error : " + e.getStackTrace()); } } return obj; } public static void main(String[] args) { String fileName = "c://user.txt"; // 保存对象的文件 User user = new User("@pony", 28); // 创建一个User对象 user.writeToFile(user, fileName); // 将对象写入文件 User u = (User) (user.getObjFromFile(fileName)); // 从文件中取得对象 // 输出对象名 if (u != null) System.out.println("ok, get the user object from the file. /nThe user's name is : " + u.name); }}?