Java序列化和反序列化 Serializable BeanUtils.copyProperties赋值属性方法

发布时间 2023-12-20 22:53:11作者: oktokeep

Java序列化和反序列化 Serializable BeanUtils.copyProperties赋值属性方法

package com.example.core.mydemo.java;

import com.example.core.mydemo.json2.GsonUtils;
import org.springframework.beans.BeanUtils;

import java.io.*;

/**
 * Java序列化和反序列化 Serializable BeanUtils.copyProperties赋值属性方法
 * Serialization(序列化):将java对象以一连串的字节保存在磁盘文件中的过程,也可以说是保存java对象状态的过程。序列化可以将数据永久保存在磁盘上(通常保存在文件中)。
 *
 * deserialization(反序列化):将保存在磁盘文件中的java字节码重新转换成java对象称为反序列化。
 *
 * output
 *Person object has been serialized.
 * Deserialized Person's name is :{"firstName":"John","lastName":"Doe","sex":"男"}
 * deserializedPerson=com.example.core.mydemo.java.Person@368102c8
 * myPerson=John Doe
 * myPerson 2={"firstName":"John","lastName":"Doe"}
 *
 */
public class SerializationExample {

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        // 创建要被序列化的对象
        Person person = new Person("John", "Doe");
        person.setSex("男");
        // 创建输出流
        FileOutputStream fileOut = new FileOutputStream("person.ser");
        ObjectOutputStream out = new ObjectOutputStream(fileOut);

        // 将对象写入输出流
        out.writeObject(person);

        // 关闭输出流
        out.close();
        fileOut.close();

        System.out.println("Person object has been serialized.");

        // 从输入流中读取并反序列化对象
        FileInputStream fileIn = new FileInputStream("person.ser");
        ObjectInputStream in = new ObjectInputStream(fileIn);

        // 从输入流中读取对象
        Person deserializedPerson = (Person)in.readObject();

        // 打印反序列化后的对象信息
        System.out.println("Deserialized Person's name is :" + GsonUtils.toJson(deserializedPerson));

        // 关闭输入流
        in.close();
        fileIn.close();

        //序列化对象赋值
        copy(deserializedPerson);

    }

    private static void copy(Serializable deserializedPerson) {
        System.out.println("deserializedPerson=" + deserializedPerson);

        //根据属性值来赋值
        MyPerson myPerson = new MyPerson();
//        Person myPerson = new Person();
        //根据属性值来赋值
        BeanUtils.copyProperties(deserializedPerson,myPerson);
        System.out.println("myPerson=" + myPerson.getName());
        System.out.println("myPerson 2=" + GsonUtils.toJson(myPerson));

    }

}


package com.example.core.mydemo.java;

import java.io.Serializable;

public class Person implements Serializable {

    private String firstName;
    private String lastName;
    //transient关键字表示有理的,被修饰的数据不能进行序列化
//    private transient String  sex;
    private  String  sex;

    public Person(){
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Person(String fname, String lname){
        this.firstName = fname;
        this.lastName = lname;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getFirstName(){
        return firstName;
    }

    public String getLastName(){
        return lastName;
    }

    public String getName(){
        return firstName + " " + lastName;
    }
}

package com.example.core.mydemo.java;

import java.io.Serializable;

public class MyPerson implements Serializable {
    private String firstName;
    private String lastName;

    private String firstName2;
    private String lastName2;

    public MyPerson(){

    }

    public MyPerson(String fname, String lname){
        this.firstName = fname;
        this.lastName = lname;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getFirstName2() {
        return firstName2;
    }

    public void setFirstName2(String firstName2) {
        this.firstName2 = firstName2;
    }

    public String getLastName2() {
        return lastName2;
    }

    public void setLastName2(String lastName2) {
        this.lastName2 = lastName2;
    }

    public String getFirstName(){
        return firstName;
    }

    public String getLastName(){
        return lastName;
    }

    public String getName(){
        return firstName + " " + lastName;
    }
}