首页 > 其他分享 >对象流序列号与反序列号

对象流序列号与反序列号

时间:2022-09-02 21:44:06浏览次数:59  
标签:name 对象 age Person oos 序列号 String

/*
       序列化过程:将内存中的java对象保存到磁盘中或通过网络传输出去,使用ObjectOutputStream
     */
    @Test
    public void test5() throws IOException {
        FileOutputStream fos = new FileOutputStream("hello.dat");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeUTF("java学习中");
        oos.flush();//刷新操作

        oos.writeObject(new Person("张三",20));
        oos.flush();
        oos.close();
    }

    /*
        反序列化:将磁盘文件中的对象还原为内存中的一个java对象
        使用ObjectInputStream
     */
    @Test
    public void test6() throws IOException, ClassNotFoundException {
        FileInputStream fis = new FileInputStream("hello.dat");
        ObjectInputStream ois = new ObjectInputStream(fis);

        Object o = ois.readUTF();
        Object o1 = ois.readObject();

        String str = (String)o;
        System.out.println(str);
        System.out.println(o1);
        ois.close();
    }

  

Person类序列化需要满足以下条件:

1.需要实现接口Serializable 

2.当前类提供一个常量:serialVersionUID 

3.除了当前Person类需要实现Serializable 接口之外,还必须保证其内部的所有属性也必须是可序列号的(默认情况下,基本数据类型可序列号)

ObjectOutputStream 、ObjectInputStream 不能序列化static和transient修饰的成员变量

 

public class Person implements Serializable {
    private static final long serialVersionUID = -68494470754667710L;
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }


    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

  

 

标签:name,对象,age,Person,oos,序列号,String
From: https://www.cnblogs.com/ixtao/p/16651318.html

相关文章

  • C#-装箱与拆箱/预编译指令与对象初始化器
    装箱与拆箱1.概念装箱:值类型-->引用类型拆箱:引用类型-->值类型两种类型只有存在继承关系的时候,才可能出现装箱或拆箱操作。2.注意事项装箱和拆箱本质上是数据存储在......
  • django_响应对象
    Django_响应对象响应对象响应对象有三种形式:HttpResponse()render()Redirect()(1)HttpResponse()django服务器接收到客户端发来的请求之后,会将提交上来的数据封装成......
  • 记一则由临时对象引起的 bug
    最近在用imgui写一个数据对比工具,里面需要使用Win32函数来选择文件路径。相关代码差不多是这个样子:std::stringGetOpenFilePath(conststd::string&title){char......
  • Java中具有继承的对象序列化
    在序列化中,当引入继承时,则根据超类和子类定义了某些情况,这使对每种情况下的序列化的理解变得更加简单。应遵循的基本规则如下。1.当超类实现时,可序列化接口而子类则不。......
  • 学习 python进阶 面向对象
    python中一切皆对象  绑定方法和非绑定方法  类装饰器property       函数只能有一个self,如果多个变量不能加property装饰器用途二  ......
  • 面试~jvm(JVM内存结构、类加载、双亲委派机制、对象分配,了解垃圾回收)
    一、JVM内存结构▷谈及内存结构各个部分的数据交互过程:还可以再谈及生命周期、数据共享;是否GC、是否OOM答:jvm内存结构包括程序计数器、虚拟机栈、本地方法栈、堆、方......
  • 面向对象(方法、继承、重写)
    前言本文主要介绍方法(实例方法、类方法、静态方法)、继承(单继承和多继承)以及重写等内容。一、方法1、实例方法用户自定义的方法。classStudent:#类属性stu......
  • 类图和对象图
    概述定义类图(ClassDiagram)是用于显示一组类、接口以及它们之间关系的图。类图用于对系统中的各种概念进行建模,并描绘出它们之间的关系,主要通过系统中的类以及类之间的......
  • js 对象的深复制 解决不能复制undefined
    用普通的拷贝 JSON.parse和JSON.stringify进行对象拷贝是不会拷贝undefined//普通的拷贝  constobj={    a:{     b:{    ......
  • 对象和类
    对象和类面向对象的概念在上一篇文章中,我们讨论了一点C++的历史。在本文中,我们将讨论OOP(面向对象编程)。本博客不包含数据类型和其他与C++相关的内容。为此,您可以参......