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序列化和反序列化 Serializable BeanUtils.copyProperties赋值属性方法的更多相关文章

  1. Java序列化与反序列化(Serializable)

    Java序列化与反序列化(Serializable) 特别注意: 1.要序列化的类必须实现Serializable借口 2.在反序列化(读取对象)的时候必须额外捕获EOFException 3.序列化 ...

  2. Java 序列化和反序列化(三)Serializable 源码分析 - 2

    目录 Java 序列化和反序列化(三)Serializable 源码分析 - 2 1. ObjectStreamField 1.1 数据结构 1.2 构造函数 2. ObjectStreamClass ...

  3. Java 序列化和反序列化(二)Serializable 源码分析 - 1

    目录 Java 序列化和反序列化(二)Serializable 源码分析 - 1 1. Java 序列化接口 2. ObjectOutputStream 源码分析 2.1 ObjectOutputSt ...

  4. Java 序列化和反序列化(一)Serializable 使用场景

    目录 Java 序列化和反序列化(一)Serializable 使用场景 1. 最简单的使用:Serializable 接口 2. 序列化 ID 的问题 3. 静态字段不会序列化 4. 屏蔽字段:tr ...

  5. Serializable详解(1):代码验证Java序列化与反序列化

    说明:本文为Serializable详解(1),最后两段内容在翻译上出现歧义(暂时未翻译),将在后续的Serializable(2)文中补充. 介绍:本文根据JDK英文文档翻译而成,本译文并非完全按照 ...

  6. Java基础18:Java序列化与反序列化

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  7. 夯实Java基础系列22:一文读懂Java序列化和反序列化

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  8. Java序列化与反序列化

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...

  9. [转] Java序列化与反序列化

    原文地址:http://blog.csdn.net/wangloveall/article/details/7992448 Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java ...

  10. Java基础(五)-Java序列化与反序列化

    .output_wrapper pre code { font-family: Consolas, Inconsolata, Courier, monospace; display: block !i ...

随机推荐

  1. [FAQ] VsCode 同时多行编辑

      [多光标自定义编辑] 按住 alt 键,鼠标左键点击,出现多个光标. [批量选中匹配编辑] 鼠标选中字符,按快捷键 ctrl + shift + L,字符的右侧都出现光标,可同时编辑. Tool: ...

  2. [Contract] openzeppelin/cli 开发, 部署, 升级智能合约

    Install Dependency $ npm init $ npm install @openzeppelin/cli Setup project $ npx openzeppelin init ...

  3. vue+element设置选择日期最大范围(普通版)

    效果是只能跟当天时间有关(30天),下一篇将来的任意时段,比较符合实际 <!DOCTYPE html> <html> <head> <meta charset ...

  4. js实现一个拖拽效果(本例vue中),边界限定,获取鼠标坐标,div坐标

    有事没事搞个图: demo: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  5. 堆优化模拟退火(List-Based Simulated Annealing|LBSA)

    申明 本文部分内容来自List-Based Simulated Annealing Algorithm for Traveling Salesman Problem[1] 如有侵权,请联系删除 引入 ...

  6. Spring6 当中的 Bean 循环依赖的详细处理方案+源码解析

    1. Spring6 当中的 Bean 循环依赖的详细处理方案+源码解析 @ 目录 1. Spring6 当中的 Bean 循环依赖的详细处理方案+源码解析 每博一文案 1.1 Bean的循环依赖 1 ...

  7. Git——分支管理(2)

    Git--分支管理(2) 提示:图床在国外且动图比较多的情况下,需要时间加载. 目录: 目录 Git--分支管理(2) 提示:图床在国外且动图比较多的情况下,需要时间加载. 目录: Git基础 Git ...

  8. Ubuntu安装完VMware tools还是不能和主机之间拖拽文件

    Ubuntu安装完VMware tools还是不能和主机之间拖拽文件 1.确保已安装了VMware Tools 2.禁用 Wayland sudo gedit /etc/gdm3/custom.con ...

  9. Linux中的umask

    在Linux中,当创建一个文件或者目录的时候,系统会自动为这个文件或者目录赋予默认的权限,而umask命令就是用来控制这个默认权限的. 查看umask umask的查看有两种方式,一种不带选项-S,一 ...

  10. ansible(4)--ansible的command和shell模块

    1. command模块 功能:在远程主机执行 shell 命令:为默认模块,可省略 -m 选项: 注意:不支持管道命令 |: command模块的常用参数如下: 参数 说明 chdir DIR 执行 ...