JAVA对象序列化(Serializable、ObjectOutputStream、ObjectInputStream、 transient)

1)对象序列化是把一个对象变为二进制的数据流的一种方法。对象序列化后可以方便的实现对象的传输或存储。

2)如果一个类的对象想被序列化,则对象所在的类必须实现Serialilzable接口。此接口中没有定义任何方法,所以此借口是一个标识接口,表示一个类具备被序列化的能力。

3)对象被序列化后变为二进制,可以经过二进制数据流进行传输。此时必须依靠对象输出流(ObjectOutputStream)和对象输入流(ObjectInputStream)。

4)在序列化中,只有属性被序列化。因为每个对象都具有相同的方法,但是每个对象的属性是不相同的,也就是说,对象保存的只有属性信息,所以在序列化时,只有属性被序列化。

 1 public class Person implements Serializable {
 2     private String name;
 3     private int age;
 4     public Person(String name,int age){
 5         this.name = name;
 6         this.age = age;
 7     }
 8     public String toString(){
 9         return this.name + "....." + this.age;
10     }
11 }
 1 import java.io.File;
 2 import java.io.FileNotFoundException;
 3 import java.io.FileOutputStream;
 4 import java.io.IOException;
 5 import java.io.ObjectOutputStream;
 6 import java.io.OutputStream;
 7
 8 public class SerDemo01 {
 9
10     public static void main(String[] args) throws Exception {
11         File f = new File("D:" + File.separator + "test.txt");
12         ObjectOutputStream oos = null;
13         OutputStream out = new FileOutputStream(f);
14         oos = new ObjectOutputStream(out);
15         oos.writeObject(new Person("zhangsan",30));
16         oos.close();
17     }
18
19 }
 1 import java.io.File;
 2 import java.io.FileInputStream;
 3 import java.io.InputStream;
 4 import java.io.ObjectInputStream;
 5
 6 public class SerDemo02 {
 7
 8     public static void main(String[] args) throws Exception{
 9         File f = new File("D:" + File.separator + "test.txt");
10         ObjectInputStream ois = null;
11         InputStream input = new FileInputStream(f);
12         ois = new ObjectInputStream(input);
13         Object obj = ois.readObject();
14         ois.close();
15         System.out.println(obj);
16     }
17
18 }

输出结果为:张三.....30

如果一个对象的某些属性不希望被序列化,则可以使用transient关键字进行声明,

如果将上述Person类中的private String name;修改为private transient String name;

最后输出的结果为:null.....30

时间: 2024-09-30 10:50:14

JAVA对象序列化(Serializable、ObjectOutputStream、ObjectInputStream、 transient)的相关文章

JAVA 对象序列化——Serializable

1.序列化是干什么的?       简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化. 2.什么情况下需要序列化       a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候:    b)当你想用套接字在网络上传送对象的时候:    c)当你想通过RMI传输对象的时候: 3.当对一个对象

Java对象序列化和反序列化

Java对象序列化和反序列化 在Java中,我们如果要保存一个对象的瞬时状态值,以便在下次使用时能够得到这些值,或者持久化对象,或者使用RMI(远程方法调用),或在网络中传递对象时,此时我们就需要将对象序列化,实现序列化,我们只要实现Serializable接口,该接口是一个标记接口(Tag interface),即里面没有方法,其主要作用就是告诉JVM该类的对象可以进行序列化. 一般来说,很多类的对象都实现了Serializable接口,但是,有些对象是不能进行序列化的,比如与数据库相关的连接

java对象序列化小结

百度百科上介绍序列化是这样的: 序列化 (Serialization): 将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象. 序列化使其他代码可以查看或修改那些不序列化便无法访问的对象实例数据.确切地说,代码执行序列化需要特殊的权限:即指定了 SerializationFormatter 标志的 SecurityPermission.在默认策略下,通过 Internet 下载

java 对象序列化

上代码 /** * Person.java */ import java.io.*; public class Person implements Serializable { /** * */ private static final long serialVersionUID = 1L; private String name; private int age; public Person(String str,int num) { name=str; age=num; } public S

java 对象序列化与反序列化

Java序列化与反序列化是什么? 为什么需要序列化与反序列化? 如何实现Java序列化与反序列化? 本文围绕这些问题进行了探讨. 1.Java序列化与反序列化  Java序列化是指把Java对象转换为字节序列的过程: Java反序列化是指把字节序列恢复为Java对象的过程. 2.为什么需要序列化与反序列化 我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本.图片.音频.视频等, 而这些数据都会以二进制序列的形式在网络上传送.那么当两个Java进程进行通信时,能否实现进程间的

Java对象序列化与反序列化

Java对象序列化与反序列化 对象序列化的目标是将对象保存在磁盘中或者在网络中进行传输.实现的机制是允许将对象转为与平台无关的二进制流. java中对象的序列化机制是将允许对象转为字节序列.这些字节序列可以使Java对象脱离程序存在,从而可以保存在磁盘上,也可以在网络间传输. 对象的序列化是将一个Java对象写入IO流:与此对应的,反序列化则是从IO流中恢复一个Java对象. 实现序列化 如果要将一个java对象序列化,那么对象的类需要是可序列化的.要让类可序列化,那么这个类需要实现如下两个接口

【java】理解java对象序列化

关于Java序列化的文章早已是汗牛充栋了,本文是对我个人过往学习,理解及应用Java序列化的一个总结.此文内容涉及Java序列化的基本原理,以及多种方法对序列化形式进行定制.在撰写本文时,既参考了Thinking in Java, Effective Java,JavaWorld,developerWorks中的相关文章和其它网络资料,也加入了自己的实践经验与理解,文.码并茂,希望对大家有所帮助.(2012.02.14最后更新) 1. 什么是Java对象序列化 Java平台允许我们在内存中创建可

java 对象序列化使用

java序列化的使用很简单的用法就是,在类定义时实现java.io.serializable即可.扩展这个接口不需要实现它的任何方法,Java会自动序列化.需要注意的,被标为transient和static的属性是不会被java自动序列化的. 在面对比较复杂的对象时,比如存在双向链接关系的对象时,如果实现该接口,java在序列化时会栈溢出,如果对象比较大,会出现堆溢出.那么这时候就需要我们自己动手写一个序列化的方法. 第一种自定义序列化方式: 1.类定义扩展java.io.serializabl

每天进步一点点-实例为导学-一个java对象序列化的例子

序列化和反序列化例子 如果我们想要序列化一个对象, (对象 转 序列)首先要创建某些OutputStream(如FileOutputStream.ByteArrayOutputStream等),然后将这些OutputStream封装在一个ObjectOutputStream中.这时候,只需要调用writeObject()方法就可以将对象序列化,并将其发送给OutputStream(记住:对象的序列化是基于字节(1字节8位)的,不能使用Reader和Writer等基于字符的层次结构).而反序列的过

(转)关于 Java 对象序列化您不知道的 5 件事

关于 Java 对象序列化您不知道的 5 件事 转自:http://developer.51cto.com/art/201506/479979.htm 数年前,当和一个软件团队一起用 Java 语言编写一个应用程序时,我体会到比一般程序员多知道一点关于 Java 对象序列化的知识所带来的好处. 关于本系列 您觉得自己懂 Java 编程?事实上,大多数程序员对于 Java 平台都是浅尝则止,只学习了足以完成手头上任务的知识而已.在本 系列 中,Ted Neward 深入挖掘 Java 平台的核心功