首页 > 编程语言 >java序列化反序列化

java序列化反序列化

时间:2023-02-19 11:25:21浏览次数:31  
标签:java Student name student 序列化 public String

序列化概述

序列化: 将数据结构或对象转换成二进制字节流的过程

反序列化:将在序列化过程中所生成的二进制字节流转换成数据结构或者对象的过程

TCP/IP 四层模型

transient

transient 只能修饰变量,不能修饰类和方法。

transient 修饰的变量,在反序列化后变量值将会被置成类型的默认值。例如,如果是修饰 int 类型,那么反序列后结果就是 0。

static 变量因为不属于任何对象(Object),所以无论有没有 transient 关键字修饰,均不会被序列化。

为什么不推荐使用 JDK 自带的序列化?

  • 不支持跨语言调用 : 如果调用的是其他语言开发的服务的时候就不支持了。

  • 性能差 :相比于其他序列化框架性能更低,主要原因是序列化之后的字节数组体积较大,导致传输成本加大。

  • 存在安全问题 :序列化和反序列化本身并不存在问题。但当输入的反序列化的数据可被用户控制,那么攻击者即可通过构造恶意输入,让反序列化产生非预期的对象,在此过程中执行构造的任意代码。

class JdkSerialize {

    public static void serializePerson(Student student) throws FileNotFoundException, IOException {
        ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(
                new File("F:/student.txt")));
        oo.writeObject(student);
        oo.close();
    }

    public static Student deserializePerson() throws IOException, Exception {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("F:/student.txt")));
        Student student = (Student) ois.readObject();
        return student;
    }
    public static void main(String[] args) {
        Student student = new Student();
        student.setId("123");
        student.setName("方辰");

        try {
            // 序列化
            JdkSerialize.serializePerson(student);

            // 反序列化
            Student serializeStudent = JdkSerialize.deserializePerson();
            System.out.println(serializeStudent.getName()+";"+serializeStudent.getId());
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

class Student implements Serializable {

    private String id;

    private String name;

    public Student() {
    }

    public Student(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Kryo

Hessian

标签:java,Student,name,student,序列化,public,String
From: https://www.cnblogs.com/haveanicedayfh/p/17134385.html

相关文章

  • Hadoop序列化
    序列化定义把内存中的数据持久化(把内存中的对象转换为字节码文件存储带磁盘上)和网络传输。反序列化定义反序列化就是把接收到的字节序列(或其它协议传输的数据)或......
  • 剑指 Offer 34. 二叉树中和为某一值的路径(java解题)
    目录1.题目2.解题思路3.数据类型功能函数总结4.java代码1.题目给你二叉树的根节点root和一个整数目标和targetSum,找出所有从根节点到叶子节点路径总和等于给......
  • java hssf 写 excle
    在poi-2.5.1.jar下packagecom.club.community.util;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStre......
  • java urlrewrite
    加入urlrewrite-3.2.0.jar包 在web.xml中加入<filter><filter-name>UrlRewriteFilter</filter-name><filter-class>org.tuckey.web.fi......
  • 重温Java重写与重载
    方法重写参数列表必须完全与被重写方法的相同;返回类型必须完全与被重写方法的返回类型相同;访问权限不能比父类中被重写的方法的访问权限更低。例......
  • Java 递归和非递归实现二叉树的先序,中序,后序遍历
    前言说到树的四种遍历方式,可能大家第一时间都会想到它的四种遍历方式,并快速说了它的特点。先序(先根)遍历:即先访问根节点,再访问左孩子和右孩子中序遍历:先访问做孩子......
  • 简单的猜拳游戏-JAVA实现
    一个简单的猜拳游戏packagecom.zhou.java.demo02;importjava.util.Random;importjava.util.Scanner;publicclassDemo09{publicstaticvoidmain(String[]args......
  • Django Rest Frame work 如何使用serializers序列化函数新手教程
    DjangoRestFramework如何使用serializers序列化   DjangoRestFramework提供了serializers模块,用于序列化和反序列化模型实例以及原生数据类型......
  • Django Rest Frame work 如何使用serializers序列化
    DjangoRestFramework如何使用serializers序列化   DjangoRestFramework提供了serializers模块,用于序列化和反序列化模型实例以及Python原生数......
  • serializers序列化函数简单入门
    1.创建Django项目和应用程序首先,我们需要创建一个Django项目和一个Django应用程序。如果你已经有了Django项目和应用程序,请跳过这一步。$django-adminstartprojectm......