对象序列化
发布日期:2021-08-14 17:36:07 浏览次数:9 分类:技术文章

本文共 2595 字,大约阅读时间需要 8 分钟。

序列化基本概念

  所有的项目开发一定都有序列化的概念存在

序列化的基本实现

  所谓的对象序列化指的是将内存中保存的对象变为二进制数据流的形式进行传输,或其是将其保存在文本中。但是并不意味着所有类对象都可以序列化,严格来讲,需要被序列化的类对象往往需要传输使用,同时这个类必须实现java.io.Serializable接口,但是这个接口并没有任何的方法定义,所有只是一个标识接口

范例:定义可以被序列化对象的类

1 package cn.Tony.demo; 2  3 import java.io.Serializable; 4  5 @SuppressWarnings("serial") 6 class Person implements Serializable{ 7     private String name; 8     private int age; 9     public Person(String name,int age) {10         this.name=name;11         this.age=age;12     }13     @Override14     public String toString() {15         return "Person [name=" + name + ", age=" + age + "]";16     }17 }18 19 public class TestDemo{20     public static void main(String[] args) throws Exception {21 22     }23 }

  序列化对象时所需要保持的就是对象中的一个属性,所有默认情况下对象的属性将被转为二进制数据流

序列化与反序列化操作

  如果要想实现序列化和反序列化的对象操作,在java.io提供有两个处理类:ObjectOutputStream ObjectInputStream 这两个类的定义结构以及各自的构造方法:

范例:实现对象序列化

 

1 package cn.Tony.demo; 2  3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.ObjectInputStream; 7 import java.io.ObjectOutputStream; 8 import java.io.Serializable; 9 10 public class TestDemo{11     public static final File FILE=new File("D:"+File.separator+"IO"+File.separator+"data.txt");12     public static void main(String[] args) throws Exception {13         ser(new Person("张三",20)); 14         dser();15     }16     public static void ser(Object obj)throws Exception {
//专门负责实例化对象,17 ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(FILE));18 oos.writeObject(obj);19 oos.close();20 }21 public static void dser()throws Exception{22 ObjectInputStream ois=new ObjectInputStream(new FileInputStream(FILE));23 System.out.println(ois.readObject());24 ois.close();25 }26 } 27 @SuppressWarnings("serial")28 class Person implements Serializable{29 private String name;30 private int age;31 public Person(String name,int age) {32 this.name=name;33 this.age=age;34 }35 @Override36 public String toString() {37 return "Person [name=" + name + ", age=" + age + "]";38 }39 }

 

  在以后实际的项目开发中,你们根本不需要知道实现序列化,和反序列化操作。

transient关键字()

  实际上序列化的处理在java.io包里面有两类。Serializable是使用最多的序列化接口,那么这种操作采用自动化模式完成,默认情况下所有的属性都会被序列化,还有一个Externalizable接口是需要用户自己来动手序列化处理,一般很少使用

  但是由于默认情况Serializable会将对象中的所有属性进行保存,如果现在某些属性不希望被保存了,可以使用transient关键字。

范例:使用transient

1     private transient String name;2     private int age;

  不过大部分情况下使用序列化往往在简单java类上较多,其他类上使用序列化的操作模式相对较少,而如果简单java类很少使用transient了

 

转载于:https://www.cnblogs.com/Tony98/p/10543184.html

转载地址:https://blog.csdn.net/weixin_30731287/article/details/95528225 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:UVA 208 Firetruck (DFS+剪枝)
下一篇:通过eclipse的egit插件提交提示Auth fail

发表评论

最新留言

不错!
[***.144.177.141]2024年12月01日 18时04分12秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

Linux如何将两个线程绑定,linux下将不同线程绑定到不同core和cpu上——pthread_setaffinity_np... 2019-06-17
linux配置文件前面有分号,linux中的分号 && || 2019-06-17
linux+字体设置推荐,linux字体设置从入门到精通(入门级) 2019-06-17
html生成word页眉图片,[转载]一些WORD VBA代码(替换页眉页脚、批量设置格式、图片插入等)... 2019-06-17
html自定义列表图标,自定义列表项符号list-style-image详解 2019-06-17
html开源库,开源Html分析器解析库对比 2019-06-17
支持预览html的解压软件,Bandizip 2.05:轻量级压缩软件(支持右键预览) 2019-06-17
手机端登录注册html5,手机端的注册表单验证js代码 2019-06-17
木瓜移动每日资讯0628:TikTok测试类似小程序的 Jumps 新功能 2019-06-17
木瓜移动每周跨境资讯:TikTok测试Jumps,店小秘收购17TRACK,Facebook推出新闻通讯平台Bulletin 2019-06-17
shell获取sqlplus变量_转:sqlplus与shell互相传值的几种情况 2019-06-17
python如何创建子程序_这些子程序是做什么的? 2019-06-17
立创商城的元件原理图怎么弄到ad_(50条消息)立创EDA元件封装导入AD软件教程 2019-06-17
java aes加密长度_关于Java下的AES加密明文长度的问题 2019-06-17
crc可以检出奇数个错误_差错检测和纠正技术 2019-06-17
mysql generator 中文注释_mybatis generator 使用方法教程(生成带注释的实体类) 2019-06-17
mysql socket php fpm_nginx+php-fpm的socket配置小结 2019-06-17
php 和mysql连接测试代码_php中mysql连接和基本操作代码(快速测试使用,简单方便)_php实例... 2019-06-17
python getattr函数_在python中对self使用getattr函数 2019-06-17
java 音量_java – 音量为零? 2019-06-17