序列化与反序列化(代码片段)

zhz-8919 zhz-8919     2022-12-02     401

关键词:

定义:将类通过字节流的方式写入文件称为序列化,从类文件中通过字节流的方式读取出来称为反序列化

序列化:类要实现Serializable接口,才能序列化,Serializable接口没有任何抽象方法,是一个标记接口

try (ObjectOutputStream seri = new ObjectOutputStream(new FileOutputStream("persons.txt"))) 
            
            seri.writeObject(new Person("mili", 22));
            seri.writeObject(new Person("lili", 21));

反序列化:

try (ObjectInputStream unseri = new ObjectInputStream(new FileInputStream("persons.txt"))) 
            
            Object obj = unseri.readObject();

反序列化时,如果readObject()次数超过了文件中总共的对象数就会报错

解决办法:将所有对象添加到集合中,序列化时只序列化一个集合对象,反序列化时只读一个集合,然后遍历集合就能得到所有对象

try (ObjectOutputStream seri = new ObjectOutputStream(new FileOutputStream("persons.txt"));
                ObjectInputStream unseri = new ObjectInputStream(new FileInputStream("persons.txt"))) 
            
            Set<Person> set = new HashSet<>();
            
            set.add(new Person("mike", 22));
            set.add(new Person("mili", 22));
            set.add(new Person("lili", 21));
            
            seri.writeObject(set);
            Object uset = unseri.readObject();
            
            for (Person person : (HashSet<Person>)uset) 
                System.out.println(person);
            

类的版本号问题:如果本地类型的版本ID和磁盘中的对象的类的版本ID不相同,就会发生InvalidClassException。避免:手动生成序列化版本ID,是否改变类型的版本,手动指定,不要自动生成
手动指定版本号private static final long serialVersionUID = 1L;

序列化与反序列化(代码片段)

序列化和反序列化的三种方法:1.使用JavaScriptSerializer类2.使用DataContractJsonSerializer类3.使用JSON.NET类库第一种方法://使用JavaScriptSerializer方式需要引入的命名空间,这个在程序集System.Web.Extensions.dll.中usingSystem.Web.Script.Serialization;1.... 查看详情

java对象序列化与反序列化(代码片段)

引言    在学习IO流时,我们会学到一个序列化流,和反序列化流,相信不少小伙伴学到这个是有些懵的,今天就带大家来了解一下java的对象序列化流与反序列化流  目录一、什么是java的对象序列化流与反序列... 查看详情

jsonutils序列化与反序列化工具(代码片段)

直接见代码,需要引入的包如下文,需要谷歌的包。1packagecom.cxf.value;23importcom.fasterxml.jackson.core.type.TypeReference;4importcom.fasterxml.jackson.databind.DeserializationFeature;5importcom.fasterxml.jackson.databind.Ob 查看详情

io流--序列化流与反序列化流(代码片段)

IO流--序列化流与反序列化流:  序列化流:把对象当做流一样写入到文本文件中ObjectOutputSream();  反序列化流:把文本文件中的流对象还原成对象ObjectInputSream(); 具体的使用: 1  创建java对象实现序... 查看详情

fastjson序列化与反序列化(代码片段)

...个类是fastjsonAPI的入口,主要的功能都通过这个类提供。序列化API//将Java对象序列化为JSON字符串,支持各种各种Java基本类型和JavaBeanpublicstaticStringtoJSONString(Objectobject,SerializerFeature...features);//将Java对象序列化为JSON字符串,返回JSO... 查看详情

java编程基础-序列化与反序列化(代码片段)

序列化ObjectOutputStream类将对象数据序列化,保存到文件中构造方法ConstructorObjectOutPutStream(OutputStreamout);输出字节流对象作为当前方法的参数新建Person类作为实例:packagecn.ocean888;importjava.io.Serializable;//如果一个类需要序列化,则需要遵... 查看详情

golanggo语言json的序列化与反序列化实践(代码片段)

Go语言JSON的序列化与反序列化实践导读本文使用Go原生支持的包,对JSON字符串以及.json文件进行序列化与反序列化实践。使用到的包是encoding/json。详细文档可查看官方中文文档,链接为:https://studygolang.com/pkgdoc本文中... 查看详情

序列化与反序列化(代码片段)

...ngSystem.IO;//usingSystem.Runtime.Serialization.Formatters.Binary;namespace序列化与反序列化classProgrampublicstaticvoidMain(String[]args)//序列化//Personp=newPerson();//p.Name="张三";//p.Age=20;//p.Gender=‘f‘;//using(FileStreamfswrite=newFileStream(@"f:Person.txt",FileMode.CreateNew... 查看详情

序列化serialize()与反序列化unserialize()的实例(代码片段)

在写序列化serialize与反序列化unserialize()时,我们先来看看:serialize—产生一个可存储的值的表示描述stringserialize(mixed$value)serialize()返回字符串,此字符串包含了表示value的字节流,可以存储于任何地方。这有利于存储或传递PHP的... 查看详情

golanggo语言xml的序列与反序列化实践(代码片段)

Go语言XML的序列与反序列化实践导读本文使用Go原生支持的包,对XML字符串以及.xml文件进行序列化与反序列化实践。同时对Go语言下的JSON序列化反序列化与XML的序列化反序列化进行性能测试与比对。使用到的包是encoding/xml。... 查看详情

golanggo语言xml的序列与反序列化实践(代码片段)

Go语言XML的序列与反序列化实践导读本文使用Go原生支持的包,对XML字符串以及.xml文件进行序列化与反序列化实践。同时对Go语言下的JSON序列化反序列化与XML的序列化反序列化进行性能测试与比对。使用到的包是encoding/xml。... 查看详情

golanggo语言xml的序列与反序列化实践(代码片段)

Go语言XML的序列与反序列化实践导读本文使用Go原生支持的包,对XML字符串以及.xml文件进行序列化与反序列化实践。同时对Go语言下的JSON序列化反序列化与XML的序列化反序列化进行性能测试与比对。使用到的包是encoding/xml。... 查看详情

序列化与反序列化(代码片段)

一、序列化和反序列化的概念把对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为对象的过程称为对象的反序列化。对象的序列化主要有两种用途:把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中... 查看详情

pickle序列化与反序列化(基础)加优化(代码片段)

importpickledefsh(name):print("hello,",name)#序列化存储info=‘key‘:‘mode‘,‘lis‘:‘koud‘,‘olo‘:234,‘func‘:shpickle可复杂序列化f=open("text.txt","wb")print(pickle.dumps(info))#pickle序 查看详情

java对象操作流:序列化与反序列化(代码片段)

文章目录对象操作流1.对象序列化流1.1.1对象序列化介绍1.1.2对象序列化流:ObjectOutputStream1.1.3序列化示例代码2.对象反序列化流2.1对象反序列化流:ObjectInputStream2.2示例代码3.serialVersionUID&transient3.0遇到的问题原因分析3.1... 查看详情

基于protostuff的序列化与反序列化(代码片段)

一种protobuf序列化方式,不需要编写proto文件Maven依赖<dependency><groupId>com.dyuproject.protostuff</groupId><artifactId>protostuff-core</artifactId><version>1.0.7</version 查看详情

hive之序列化与反序列化(serde)(代码片段)

序列化与反序列化的作用1,序列化是对象转化为字节序列的过程;2,反序列化是字节码恢复为对象的过程;序列化的作用主要有两个:(1),对象向的持久化;即把对象转换成字节码后保存文件;(2),对象数据的传输;反... 查看详情

序列化与反序列化——作为java开发,应该避开这些坑(代码片段)

文章目录1.序列化与反序列化的概念2.子类实现Serializable接口,父类没有实现,子类可以序列化吗?3.类中存在引用对象,这个类对象在什么情况下可以实现序列化?4.同一个对象多次序列化之间有属性更新࿰... 查看详情