• Java序列化与反序列化


    序列化的意义?

    序列化可以保存内存中的对象,并且可以重新读出来。当需要用套接字在网络上传输对象的时候可以用序列化,当需要把对象保存到文件或者数据库中的时候可以用序列化。

    Java如何将对象序列化,以及如何进行反序列化呢?看如下代码。

     1 //下面是要保存的对象对应的类
     2 //java.io.NotSerializableException: com.cskaoyan.serial.Student
     3 //表示该类不能序列化
     4 //并不是任何类都支持序列化,如果需要该类可以序列化,则应该让他自己增加序列化的功能
     5 
     6 //Exception in thread "main" java.io.InvalidClassException: 
     7 /*com.cskaoyan.serial.Student; 
     8 local class incompatible: stream classdesc serialVersionUID = 209512936453524119, 
     9 local class serialVersionUID = -9099220194939822442*/
    10 
    11 public class Student implements Serializable {//不需要你实现任何抽象方法的接口,标记接口
    12     private String name ;
    13     public int age;
    14     public String gender;
    15     
    16     public String getName() {
    17         return name;
    18     }
    19     public void setName(String name) {
    20         this.name = name;
    21     }
    22     public int getAge() {
    23         return age;
    24     }
    25     public void setAge(int age) {
    26         this.age = age;
    27     }
    28     public String getGender() {
    29         return gender;
    30     }
    31     public void setGender(String gender) {
    32         this.gender = gender;
    33     }
    34     public Student(String name, int age, String gender) {
    35         super();
    36         this.name = name;
    37         this.age = age;
    38         this.gender = gender;
    39     }
    40     @Override
    41     public String toString() {
    42         return "Student [name=" + name + ", age=" + age + ", gender=" + gender + "]";
    43     }
    44     
    45     
    46 }
     1 /**
     2  * 
     3  * 通过在流中使用文件,将对象序列化保存,可以实现对象的持久存储。
     4  * 
     5  * 序列化流  
     6    ObjectOutputStream 
     7        本质上也是一个字节输出流  。
     8    ObjectOutputStream 将 Java 对象 写入 OutputStream。      
     9        
    10    void writeObject(Object obj) 
    11           将指定的对象写入 ObjectOutputStream。     
    12        
    13        
    14        反序列化流
    15    ObjectInputStream
    16        可以使用 ObjectInputStream 读取对象。
    17  * ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。
    18  * @author Lan
    19  *
    20  */
    21 
    22 public class SerialDemo {
    23 
    24     public static void main(String[] args) throws IOException, ClassNotFoundException {
    25         // TODO Auto-generated method stub
    26 
    27          //需要outputSteam初始化
    28         //序列化
    29 /*         FileOutputStream fos= new FileOutputStream("1.txt");
    30          ObjectOutputStream objectOutputStream = new ObjectOutputStream(fos); //无参 访问权限受限
    31          
    32          Student s1=new Student("张三", 50, "female");
    33          
    34          s1.setName("李四");
    35          objectOutputStream.writeObject(s1);
    36          
    37          objectOutputStream.close();*/
    38          
    39          //反序列化
    40         
    41         ObjectInputStream objectInputStream= new ObjectInputStream(new FileInputStream("1.txt"));
    42         
    43         Object readObject = objectInputStream.readObject();//说明此处返回的是Student的实例
    44         
    45         System.out.println("SerialDemo.main()"+readObject);
    46     }
    47 
    48 }
    原创作品,转载请注明出处!
  • 相关阅读:
    接口-DAO模式代码阅读及应用
    3.1-有理数类的设计

    树、二叉树、查找算法总结
    编辑器、编译器、文件、IDE等常见概念辨析
    二叉排序树
    markdown的一些语法
    数据结构小结(线性表)
    springMVC model传对象数组 jq 获取
    java.sql.SQLException: Data truncated for column 'lastSeason' at row 1
  • 原文地址:https://www.cnblogs.com/yidijimao/p/5277788.html
Copyright © 2020-2023  润新知