java中序列化与反序列化对象的简单操作!
2013-10-09 15:23
316 查看
序列化分为两个步骤:
1.建立ObjectOutputStream输出流对象,该对象需要建立在一个文件输出流上,如FileOutputStream。
2..利用该对象的writeobject(object obj)方法即可将序列化后的对象写入文件。
反序列化与之相反:
1.建立一个ObjectIntputStream输入流对象,该对象需要建立在一个文件输入流上,如FileInputStream。
2..利用该对象的readobject(filename)方法即可将文件文件中的二进制对象读取至内存中,通过强转获取恢复该对象。
输出:fly年龄:24
总结:
1.若需要序列化的类中含有引用对象,则该对象必须也实现serializable,即可序列化。
2.java序列化机制不会将同一引用对象重复序列化,若发现该对象已经被序列化了,则下次不会序列化。如
MyClass m=new MyClass();
oos.writeObject(m);
oos.writeObject(m);
并不会序列化两次m对象,在输出的二进制文件中只有一个对象。因此不要在序列化后修改该对象的值,因为即使修改了值然后再次序列化,还是不会输出至文件中(仍然是同一对象)。
3.反序列化时一定要按照序列化时的顺序进行读取。
4.若不希望序列化某个字段则可再该字段前夹transient.
1.建立ObjectOutputStream输出流对象,该对象需要建立在一个文件输出流上,如FileOutputStream。
2..利用该对象的writeobject(object obj)方法即可将序列化后的对象写入文件。
//序列化的对象需要实现serializable接口,但是不用实现任何方法 public class MyClass implements java.io.Serializable { private String myName; private int myAge; public MyClass(String name,int age){ this.myName=name; this.myAge=age; } public void showInfo(){ System.out.println(this.myName+"年龄为:"+this.myAge); } }
public static void main(String[] args){ //序列化: //该对象可将序列化后的实例写入磁盘文件 //ObjectOutputStream输出流需要建立在一个文件输出流的基础上 ObjectOutputStream oos=null; try{ //创建一个输出流 oos=new ObjectOutputStream(new FileOutputStream("serializable.txt")); oos.writeObject(new MyClass("fly",24));//将MyClass对象写入至输出流 } catch(IOException ex){ ex.printStackTrace(); } finally{ if(oos!=null){ try{ oos.close(); } catch(IOException ex){ ex.printStackTrace(); } } }
反序列化与之相反:
1.建立一个ObjectIntputStream输入流对象,该对象需要建立在一个文件输入流上,如FileInputStream。
2..利用该对象的readobject(filename)方法即可将文件文件中的二进制对象读取至内存中,通过强转获取恢复该对象。
//反序列化: ObjectInputStream ois=null;//输入流 try { ois=new ObjectInputStream(new FileInputStream("serializable.txt")); MyClass myClass= (MyClass)ois.readObject(); myClass.showInfo(); } catch (Exception ex) { ex.printStackTrace(); } finally{ if(ois!=null){ try{ ois.close(); } catch(IOException ex){ ex.printStackTrace(); } } }
输出:fly年龄:24
总结:
1.若需要序列化的类中含有引用对象,则该对象必须也实现serializable,即可序列化。
2.java序列化机制不会将同一引用对象重复序列化,若发现该对象已经被序列化了,则下次不会序列化。如
MyClass m=new MyClass();
oos.writeObject(m);
oos.writeObject(m);
并不会序列化两次m对象,在输出的二进制文件中只有一个对象。因此不要在序列化后修改该对象的值,因为即使修改了值然后再次序列化,还是不会输出至文件中(仍然是同一对象)。
3.反序列化时一定要按照序列化时的顺序进行读取。
4.若不希望序列化某个字段则可再该字段前夹transient.
相关文章推荐
- [java]:对象序列化非常简单能看懂的操作
- Java对象序列化的简单总结
- Java对象序列化操作详解
- 一个简单的java对象序列化工具类
- Java 对象序列化和操作文件 正则表达式
- Java对象序列化与反序列化操作
- java执行序列化和反序列化操作实现对象的clone
- java对象序列化和反序列化操作记录
- Java的IO操作(三) - 对象的序列化、ObjectInputStream和ObjectOutputStream类
- 黑马程序员——Java基础——对象序列化、管道流、RandomAccessFile类、操作基本数据类型的流对象、字符编码
- Java基础(15):IO流—掌握对象序列化和反序列化操作
- Java IO 中对象的序列化操作
- Android 对象序列化 Java中实现Serializable序列化与Android特有的实现Parceable接口序列化操作
- Java的IO操作(三) - 对象的序列化、ObjectInputStream和ObjectOutputStream类
- Java中的文件操作和对象的序列化
- java 关于中文字的输出 输入 和文件操作(对象序列化)
- JAVA基础 day23 IO流的其他类 (对象的序列化 管道流 RandomAccessFile类(随机读取文件) DateStream(操作基本数据类型的流) 操作数组的流 )字符编码问题
- Java学习笔记——IO操作之对象序列化及反序列化
- Java基础之对象的序列化(持久化)操作对象ObjectInputStream/ObjectOutputStream
- java IO操作与字节流(五)对象序列化