首页 > 编程语言 >Java序列化和反序列化 Serializable BeanUtils.copyProperties赋值属性方法

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

时间:2023-12-20 22:55:06浏览次数:36  
标签:Java String firstName lastName Person copyProperties 序列化 public

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;
    }
}

 

标签:Java,String,firstName,lastName,Person,copyProperties,序列化,public
From: https://www.cnblogs.com/oktokeep/p/17917823.html

相关文章

  • Java登陆第二十六天——初识Servlet
    静态资源和动态资源静态资源程序运行之前就存在于服务器之中的资源。例如html、css、js、img、音频文件和视频文件等。动态资源不是指动画,运动的效果。程序运行之前无法确定其数据,通过代码动态的生成数据。程序运行时,通过代码生成的资源。例如Servlet、Th......
  • java,ArrayList类
    ArrayList是一个数组列表,可以将多个对象放入数组中,是一个长度可变的集合,提供了增删改查的功能。publicclassTest2{publicstaticvoidmain(String[]args){Catc1=newCat("小黑","黑色",2.2);Catc2=newCat("小白","白色",2.3);Catc......
  • 【代码块】-结构体序列化与反序列化
    整理代码块代码块整理后存储,供后期使用结构体序列化与反序列化usingSystem;usingSystem.Runtime.InteropServices;usingSystem.Text;namespacestructTest{///<summary>///结构体序列化///</summary>publicclassstructSerializable{......
  • c# - 如何在自定义 System.Text.Json JsonConverter 中使用默认序列化?
    我正在写一个 custom System.Text.Json.JsonConverter 将旧数据模型升级到新版本。我已覆盖 Read()并实现了必要的后处理。但是,我根本不需要在 Write() 中做任何自定义操作。方法。如果我根本没有转换器,如何自动生成默认序列化?显然我可以使用不同的 JsonSerializerOption......
  • Java 并发编程在生产应用场景及实战
    背景介绍为什么需要学习Java并发?从提升性能角度来说提升了对CPU的使用效率:目前生产的服务器大多数都是多核,标配的机器都是8C/16G。操作系统会将不同的线程分配给不同的核心处理,理论上,有多少核心就有多少个线程并行执行。如果没有并发编程,CPU的利用率将极大的浪费,假设当......
  • VSCode调试Javascript
    CodeRunner在应用商店中搜索CodeRunner插件进行安装。选中你要执行的Javascript脚本,右键选择RunCode,利用Console.log在下方的输出窗口里可以看到输出结果。如果不小心点击了关闭按钮X关闭了输出窗口可以点击左上方的调试控制台重新打开。通常我用它快速输出一段JS代码......
  • java深拷贝的几种方法
    使用序列化和反序列化:将集合对象序列化为字节流,然后再反序列化成一个新的对象。这种方式需要确保集合中的所有元素都是可序列化的。importjava.io.*;publicstaticsource){try{ByteArrayOutputStreambyteOut=newByteArrayOutputStream();ObjectOutputStreamout=new......
  • Java网络IO-BIO
    JavaBIO就是传统的JavaI/O编程BIO(BlockingI/O):同步阻塞,服务器实现:一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理。单线程情况下,只有一个线程可以处理客户端请求,也就是同时只能连接一个客户端。优化点:可以通过线程池机制改善,实现多个客户端连......
  • beanshell导入java文件
    beanshell导入java文件beanshell可以读取class格式的文件步骤:    a、添加BeanShell预处理程序    b、请求调用   beanshell可以读取java格式的文件步骤:    a、添加BeanShell预处理程序    b、请求调用  ......
  • 基于java语言开发的医院绩效核算系统源码
    医院绩效考核系统全套源码,医院绩效核算系统源码,java语言开发    医院绩效考核系统可根据工作绩效考核管理规定,配置相应的绩效考核模型,从工作量统计、核算维度、核算权重三方面计算工作绩效,利用数据处理和数据分析的支撑作用,实现对工作量统计和绩效考核结果的统计分析展示,为......