序列化、什么是反序列化?_啥叫反序列化-程序员宅基地

技术标签: JavaSE  序列化  IO流  


一、对象序列化流

1. 对象序列化介绍

  1. 对象序列化:就是将对象保存到磁盘中,或者在网络中传输对象
  2. 这种机制就是使用一个字节序列表示一个对象,该字节序列包含:对象的类型、对象的数据和对象中存 储的属性等信息
  3. 字节序列写到文件之后,相当于文件中持久保存了一个对象的信息
  4. 反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化

2. 对象序列化流: ObjectOutputStream

将Java对象的原始数据类型和图形写入OutputStream。 可以使用ObjectInputStream读取(重构)对 象。 可以通过使用流的文件来实现对象的持久存储。
如果流是网络套接字流,则可以在另一个主机上或 另一个进程中重构对象

3. 构造方法

在这里插入图片描述

4. 序列化对象的方法

在这里插入图片描述

5. 示例代码

学生类:

public class Student implements Serializable {
    

    private String name;
    private int age;


    public Student() {
    
    }

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

    public String getName() {
    
        return name;
    }

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

    public int getAge() {
    
        return age;
    }

    public void setAge(int age) {
    
        this.age = age;
    }

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

测试类:

/*    
    NotSerializableException:抛出一个实例需要一个Serializable接口。 序列化运行时或实例的类可能会抛出此异常

    类的序列化由实现java.io.Serializable接口的类启用。 不实现此接口的类将不会使任何状态序列化或反序列化
 */
public class ObjectOutputStreamDemo {
    
    public static void main(String[] args) throws IOException {
    
        //ObjectOutputStream​(OutputStream out):创建一个写入指定的OutputStream的ObjectOutputStream
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("myOtherStream\\oos.txt"));

        //创建对象
        Student s = new Student("林青霞",30);

        //void writeObject​(Object obj):将指定的对象写入ObjectOutputStream
        oos.writeObject(s);

        //释放资源
        oos.close();
    }
}

二、对象反序列化流

1. 对象反序列化流: ObjectInputStream

ObjectInputStream反序列化先前使用ObjectOutputStream编写的原始数据和对象

2. 构造方法

3. 反序列化对象的方法

在这里插入图片描述

4. 示例代码

public class ObjectInputStreamDemo {
    
    public static void main(String[] args) throws IOException, ClassNotFoundException {
    
        //ObjectInputStream​(InputStream in):创建从指定的InputStream读取的ObjectInputStream
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("myOtherStream\\oos.txt"));

        //Object readObject​():从ObjectInputStream读取一个对象
        Object obj = ois.readObject();

        Student s = (Student) obj;
        System.out.println(s.getName() + "," + s.getAge());

        ois.close();
    }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44531966/article/details/109758804

智能推荐

如果结束进程拒绝访问,可以尝试以下-程序员宅基地

文章浏览阅读2.3k次。如果taskkill /f /pid 123 出现拒绝访问时,可使用以下方式删除进程:wmic process where name=‘qq.exe’ delete11如果这样还杀不死,恐怕就要进[安全模式]删除了。杀了进程,想删除文件,可以这样删除cmd下运行:DEL /F /A /Q 文件名抄自-吉吉教主...

Visual Studio-IIS Express 支持局域网访问配置-程序员宅基地

文章浏览阅读201次。转自:http://www.itnose.net/detail/6132793.html使用Visual Studio开发Web网页的时候有这样的情况:想要在调试模式下让局域网的其他设备进行访问,以便进行测试。虽然可以部署到服务器中,但是却无法进行调试,就算是注入进程进行调试也是无法达到自己的需求;所以只能在Visual Studio-IIS Express 中进行调试。而于此将..._visual studio iis express debug localhost

Oracle 数据库层级遍历查询_oracle遍历查询结果集-程序员宅基地

文章浏览阅读1.5k次。首先创建一张用于测试的表,表明为 TREE,表中有3个字段,分别是,ID,NANE,UP_ID。UP_ID 是 ID 的上层,主要实现树形结构的存储。1.1 初始化测试数据1.1.1 写入数据1.1.2 树形结构如下图root(8)一(1)二(2)三(3)五(5)root(6)四(4)2. 树形结构遍历查询2.1 从父节点遍历查询结果如下:2.2 从子节点开始遍历查询结果是:2.3 start with 条件 connect by prior_oracle遍历查询结果集

centos安装cmake-程序员宅基地

文章浏览阅读5.1k次。安装gcc的软件依赖(已安装请跳过)yum install -y gcc gcc-c++ make automake安装wget(已安装请跳过)yum install -y wget下载cmake源代码包,可以去官网查看最新版的下载地址:https://cmake.org/download/wget “https://cmake.org/files/v3.10/cmake-3.10...._centos安装cmake

Nova和Kuryr的下一步是什么,不断发展的IT架构以及更多OpenStack新闻-程序员宅基地

文章浏览阅读80次。有兴趣跟踪开源云中正在发生的事情吗? Opensource.com是您在开源云基础设施项目OpenStack中获取新闻的来源。 Web上的OpenStack 关于OpenStack,有很多有趣的东西。 这是一个样本: OpenStack Mitaka 版本 :Nova和Kuryr的下一步是什么? 不断发展的IT体系结构 :可能很难。 云原生如何需要文化变革 :转换IT运营..._kuryr nova

用php的系统函数处理字符串,PHP系统函数----常用字符串函数-程序员宅基地

文章浏览阅读126次。去空格或者其他字符串trim() :去除首尾空白字符空白字符包括:\t,\n,"",\0,\xoBtrim($str,[$type]);rtrim():去除尾部空白字符chop() :rtrim别名ltrim():去除头部空白字符dirname():传入一个文件路径,返回去除该文件名的文件路径dirname($path);字符串生成与转化str_pad():填充字符串str_pad($str,$l..._3. 编写 个php函数,接受 个字符串参数,返回该字符串中最 的连续 串,

随便推点

c++中string和char*的类型转换,并求string的长度_c_str() 长度-程序员宅基地

文章浏览阅读1.5k次。一、char*(char)转string(直接赋值)#include<iostream>#include<string>#include <typeinfo>using namespace std;int main(){ string str; const char* p = "ch"; //char p[] = "ch"; str = p; cout << str << endl; _c_str() 长度

linux查看cpu状态相关命令_linux查看cpu命令-程序员宅基地

文章浏览阅读1.9w次。linux查看cpu状态相关命令_linux查看cpu命令

企业信息安全整体架构_信息安全框架 安全制定、安全建设、运营、应急-程序员宅基地

文章浏览阅读3k次,点赞3次,收藏21次。在网络安全中,除了采用上述技术措施之外,加强网络的安全管理,制定有关规章制度,对于确保网络的安全、可靠地运行,将起到十分有效的作用。安全体系建设中,安全管理是一个非常重要的部分。任何的安全技术保障措施,最终要落实到具体的管理规章制度以及具体的管理人员职责上,并通过管理人员的工作得到实现。..._信息安全框架 安全制定、安全建设、运营、应急

android真机调试时使用SQLite3查询数据库_android 使用sqlite3查询数据库-程序员宅基地

文章浏览阅读1w次。当使用真机调试android程序时,有时需要在adb shell 里查询SQLite数据库。而有的手机例如华为p6,既没有root又没有自带SQLite3工具,那么如何解决这个问题呢? 1、root手机。在网上下载一键root工具,如百度一键root,并允许,使得手机获得root权限; 2、adb root。下载 Superuser Permissions 软件并运行。在cmd_android 使用sqlite3查询数据库

vscode gcc编译报错找不到路径_vscode无法找到gcc-程序员宅基地

文章浏览阅读1.1w次,点赞3次,收藏3次。最近在学习vscode配置命令行编译,在网上参考了很多教程。基本上按部就班的配置。可是到最后总显示报错,找不到文件路径,大抵为-environment-cd xxxxxxxxxx No such file or directory.后来我发现,一切都tm是中文路径的锅。在安装gcc的时候,gcc目录下不能有中文路径。这一点我也注意到了。我后来发现,文件目录所在路径也不能有中文,就cpp文件,好像gcc也没法识别找到。我将中文目录路径去掉之后就编译成功了..._vscode无法找到gcc

线性反馈移位寄存器LFSR和循环冗余码CRC-程序员宅基地

文章浏览阅读8.2k次,点赞15次,收藏98次。线性反馈移位寄存器LFSR和循环冗余码CRC0 前言1 数学基础1.1 逻辑异或1.2 模2乘法 和 模2除法2 线性反馈移位寄存器LFSR2.1 抽头和特征多项式3 循环冗余码CRC0 前言线性反馈移位寄存器(Linear Feedback Shift Register,LFSR)和循环冗余码(Cyclic Redundancy Check,CRC)是微控制器中常用的底层原理。LFSR用于生成伪随机数,后者用于生成检错码。他们的数学原理都是一样的。1 数学基础1.1 逻辑异或异或运算使用符号⊕

推荐文章

热门文章

相关标签