ObjectInputStream 和 ObjectOutputStream(对象的序列化、持久化)
2012-07-13 20:48
639 查看
将堆内存中的对象存储在硬盘上
被持久化的对象必须实现了Serializble接口
write() 和 writeInt()区别:前者只存储的int的最低8位,后者存储int的4个8位全显示。
没有方法的接口称之为 标记接口,相当于把实现它的类标注一下。
Serializble接口下只有一个常量:serialVersionUID 用于实现它的子类分配一个UID,这个UID和保存在硬盘的对象的UID是一个。UID的产生是由类中的成员组成的。比如:Person类extends于Serializble接口,然后保存一个p1对象在硬盘上,这时p1对象和Person类的UID是一致的。如果在后面修改Person类的成员,下次再用Perosn类去引用p1对象时就会报错。
例:
Person.java
ObjectDemo.java
被持久化的对象必须实现了Serializble接口
write() 和 writeInt()区别:前者只存储的int的最低8位,后者存储int的4个8位全显示。
没有方法的接口称之为 标记接口,相当于把实现它的类标注一下。
Serializble接口下只有一个常量:serialVersionUID 用于实现它的子类分配一个UID,这个UID和保存在硬盘的对象的UID是一个。UID的产生是由类中的成员组成的。比如:Person类extends于Serializble接口,然后保存一个p1对象在硬盘上,这时p1对象和Person类的UID是一致的。如果在后面修改Person类的成员,下次再用Perosn类去引用p1对象时就会报错。
例:
Person.java
import java.io.Serializable; public class Person implements Serializable { static final long serialVersionUID = 42L; // 手动将serialVersionUID的值固定,更改类成员也不会改变其值 String name; transient int age; // 如果不想将某个成员序列化,就加transient static String country = "cn"; // 静态是不能被序列化的 public Person(String name, int age) { // TODO Auto-generated constructor stub this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { // TODO Auto-generated method stub return name + ":" + age + ":" + country; } }
ObjectDemo.java
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class ObjectDemo { /** * @param args */ public static void main(String[] args) throws Exception { writeObj(); readObj(); } public static void readObj() throws Exception { ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\tmp\\obj.txt")); Person p = (Person) ois.readObject(); System.out.println(p); ois.close(); } public static void writeObj() throws Exception { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\tmp\\obj.txt")); oos.writeObject(new Person("zhangsan", 30)); oos.close(); } }
相关文章推荐
- Java基础之对象的序列化(持久化)操作对象ObjectInputStream/ObjectOutputStream
- Java对象序列化ObjectOutputStream和ObjectInputStream示例
- Socket同时使用ObjectInputStream和ObjectOutputStream传输序列化对象时的顺序
- 使用对象输入输出流(ObjectOutputStream,ObjectInputStream)实现序列化对象的深度克隆
- ObjectInputStream\ObjectOutputStream用字节流将一个Object对象持久化和读取
- (JAVA)从零开始之--对象输入输出流ObjectInputStream、ObjectOutputStream(对象序列化与反序列化)
- 对象序列化ObjectOutputStream,ObjectInputStream
- 对象输入输出流ObjectInputStream、ObjectOutputStream(对象序列化与反序列化)
- Java对象序列化ObjectOutputStream和ObjectInputStream示例
- 对象序列化 ObjectInputStream ObjectOutputStream
- IO流反序列化(objectInputStream)和序列化(ObjectOutputStream)连续存储对象StreamCorruptedException
- 对象序列化到本地文件 ObjectOutputstream ObjcetInputstream
- java语言编程IO流之对象序列化和ObjectInputStream与ObjectOutputStream
- Socket同时使用ObjectInputStream和ObjectOutputStream传输序列化对象时的顺序
- Socket同时使用ObjectInputStream和ObjectOutputStream传输序列化对象时的顺序
- Java IO--对象序列化Serializable、ObjectOutputStream、ObjectInputStream、transient
- Java对象序列化ObjectOutputStream和ObjectInputStream示例
- 24-IO流-55-IO流(ObjectOutputStream-对象的序列化)
- java IO笔记(序列化与ObjectInputStream、ObjectOutputStream)
- Java IO操作——对象序列化(Serializable接口、ObjectOutputStream、以及与Externalizable接口的用法和区别)