博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对象序列化
阅读量:4916 次
发布时间:2019-06-11

本文共 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

你可能感兴趣的文章
linux sftp安装【转】
查看>>
jQuery $.each用法
查看>>
PyQt5控件概览
查看>>
PyQt5 控件学习(一个一个学习之QKeySequenceEdit)
查看>>
vi编辑器的使用(2)
查看>>
QTP——改变Excel的单元格颜色
查看>>
C# 判断网络文件是否存在
查看>>
CodeForces 449B - Jzzhu and Cities
查看>>
常用sql语句
查看>>
Android学习笔记-保存数据的实现方法2-SharedPreferences
查看>>
python接口自动化1
查看>>
java this关键字
查看>>
JAVA8之数据流Stream
查看>>
关于控制反转(IOC)容器 ,依赖注入(DI)模式必读文章收集
查看>>
20131214-EditPlus快捷键-第二十一天
查看>>
安装Windows服务,一直提示系统正在关机的错误。
查看>>
wake,awake,waken,awaken的区别
查看>>
MySQL 字符串拼接
查看>>
iOS-回收键盘的几种方法
查看>>
knockoutJS学习笔记09:使用mapping插件
查看>>