Java对象序列化与反序列化操作纪要

    技术2022-07-11  93

    package cn.serializable; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; /** * 今天整理以下关于Java的对象序列化相关的问题: * * [ObjectOutputStream,ObjectInputStream] * * * 序列化: * 是指将对象以字节序列的方式表示;其中包括对象的数据,对象的类型,对象中存储的属性; * 当字节序列写出到文件中后相当于把对象持久化了;以上便是Java对象的序列化; * * 反序列化: * 是指将字节序列从文件中读取出来的重构对象的方式; * * 其中: * 序列化的对象需要满足两个先决条件: * 1. 该类必须实现java.io.Serializable接口; * 2. 该类中的所有属性必须是可序列化的; * 如果有不需要序列化的属性可以用transient标记对应的属性; * * 接下来还开始相关的随笔; * * 还是同以往一样,创建一个自己的测试类; * @author Administrator * */ public class SerializableTest { /** * Java程序的入口|主函数; * @param args */ public static void main(String[] args) { // 初始化一个文件流路径; String path = "D://user.txt"; // 实例化一个自己的Users类; Users user = new Users(); // 初始化一个空的Users对象; Users userRead = null; /** * 对象赋值; * 当前为私有方式,故而需set赋值; * 普通公共访问权限直接引用对象.就可以得到; */ user.setNAME("Liu ....."); user.setPS("wcadmin"); user.setAGE(110); user.setID_CARD("622222222111114448"); try { /** * 序列化; * * 指定序列化地址,实例化ObjectOutputStream序列化对象; */ ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(path)); // 指定对象的进行序列化; oos.writeObject(user); // 资源释放; oos.close(); /** * 反序列化; * 指定序列化地址,实例化ObjectInputStream反序列化对象; */ ObjectInputStream ois = new ObjectInputStream(new FileInputStream(path)); /** * 读取序列化数据; * 指定转换对象类型; */ userRead = (Users) ois.readObject(); // 资源释放; ois.close(); // 获取并打印对象信息; System.out.println("name: "+userRead.getNAME()); System.out.println("ps: "+userRead.getPS()); System.out.println("age: "+userRead.getAGE()); System.out.println("id_card: "+userRead.getID_CARD()); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } /** * 封装临时的Entity类; * @author Administrator */ class Users implements java.io.Serializable { /** * 定义私有变量; * NAME; * PS; * AGE; * ID_CARD; */ private String NAME; private String PS; private Integer AGE; /** * transient关键字: * 用来标记不需要序列化的数据属性及内容; * 表示瞬时态; */ private transient String ID_CARD; // 定义临时调用方法; public void goining() { System.out.println("This is "+ NAME + AGE); } /** * 提供get|set方法; * @return */ public String getNAME() { return NAME; } public void setNAME(String nAME) { NAME = nAME; } public String getPS() { return PS; } public void setPS(String pS) { PS = pS; } public Integer getAGE() { return AGE; } public void setAGE(Integer aGE) { AGE = aGE; } public String getID_CARD() { return ID_CARD; } public void setID_CARD(String iD_CARD) { ID_CARD = iD_CARD; } } package cn.serializable; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.List; /** * * 数据集合的序列化也是同数据对象的序列化一样; * 下面的继续走一则有关序列化的Demo: * * 集合序列化; * * @author Administrator * */ public class SerializableTest { /** * Java程序的入口|主函数; * @param args */ public static void main(String[] args) { // 初始化一个文件流路径; String path = "D://List.txt"; // 利用构造器实例化多个对象; Users usera = new Users("Liu","admin"); Users userb = new Users("Wang","wcadmin"); Users userc = new Users("Fei","123"); Users userd = new Users("Hu","123445"); // 实例化一个指定装载Users对象的List容器; List<Users> list = new ArrayList<Users>(); // List集合数据转载; list.add(usera); list.add(userb); list.add(userc); list.add(userd); try { /** * 序列化; * * 指定序列化地址,实例化ObjectOutputStream序列化对象; */ ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(path)); // 指定对象的进行序列化; oos.writeObject(list); // 资源释放; oos.close(); /** * 反序列化; * 指定序列化地址,实例化ObjectInputStream反序列化对象; */ ObjectInputStream ois = new ObjectInputStream(new FileInputStream(path)); /** * 读取序列化数据; * 指定转换对象类型; */ List<Users> listUsers = (List<Users>) ois.readObject(); // 资源释放; ois.close(); // 获取并打印对象信息; for(Users user : listUsers) { System.out.println("NAME: " + user.getNAME() + "; PS: " + user.getPS()); } } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } /** * 封装临时的Entity类; * @author Administrator */ class Users implements java.io.Serializable { /** * 定义私有变量; * NAME; * PS; * AGE; * ID_CARD; */ private String NAME; private String PS; private Integer AGE; /** * transient关键字: * 用来标记不需要序列化的数据属性及内容; * 表示瞬时态; */ private transient String ID_CARD; public Users (){} public Users (String name, String ps) { this.NAME = name; this.PS = ps; } // 定义临时调用方法; public void goining() { System.out.println("This is "+ NAME + AGE); } /** * 提供get|set方法; * @return */ public String getNAME() { return NAME; } public void setNAME(String nAME) { NAME = nAME; } public String getPS() { return PS; } public void setPS(String pS) { PS = pS; } public Integer getAGE() { return AGE; } public void setAGE(Integer aGE) { AGE = aGE; } public String getID_CARD() { return ID_CARD; } public void setID_CARD(String iD_CARD) { ID_CARD = iD_CARD; } }

     

    Processed: 0.011, SQL: 9