Java 对象序列化控制
2013-02-16 19:21
225 查看
序列化的控制主要有三种方式:
实现Externalizable接口;
实现Serializable接口 + transient修饰符;
实现Externalizable接口的替代方案:实现Serializable + 添加方法;
1、实现Externalizable接口:
对于一个Externalizable对象而言,在序列化和反序列化中需要调用默认的构造函数,所以需要注意默认构造函数的访问控制符是否得当!
Java代码
import java.io.Externalizable;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
public class Blip3
implements Externalizable {
private int i;
private String s; // No initialization
public Blip3() {
System.out.println("Blip3 Constructor");
// s, i not initialized
}
public Blip3(String x, int a) {
System.out.println("Blip3(String x, int a)");
s = x;
i = a;
// s & i initialized only in non-default constructor.
}
public String toString() {
return s + i;
}
public void writeExternal(ObjectOutput out)
throws IOException {
System.out.println("Blip3.writeExternal");
// You must do this:
out.writeObject(s);
out.writeInt(i);
}
public void readExternal(ObjectInput in)
throws IOException,
ClassNotFoundException {
System.out.println("Blip3.readExternal");
// You must do this:
s = (String) in.readObject();
i = in.readInt();
}
public static
void main(String[] args) throws IOException,
ClassNotFoundException {
System.out.println("Constructing objects:");
Blip3 b3 = new Blip3("A String ",
47);
System.out.println(b3);
ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream(
"Blip3.out"));
System.out.println("Saving object:");
o.writeObject(b3);
o.close();
// Now get it back:
ObjectInputStream in = new ObjectInputStream(new FileInputStream(
"Blip3.out"));
System.out.println("Recovering b3:");
b3 = (Blip3) in.readObject();
System.out.println(b3);
}
}
实现Externalizable接口;
实现Serializable接口 + transient修饰符;
实现Externalizable接口的替代方案:实现Serializable + 添加方法;
1、实现Externalizable接口:
对于一个Externalizable对象而言,在序列化和反序列化中需要调用默认的构造函数,所以需要注意默认构造函数的访问控制符是否得当!
Java代码
import java.io.Externalizable;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
public class Blip3
implements Externalizable {
private int i;
private String s; // No initialization
public Blip3() {
System.out.println("Blip3 Constructor");
// s, i not initialized
}
public Blip3(String x, int a) {
System.out.println("Blip3(String x, int a)");
s = x;
i = a;
// s & i initialized only in non-default constructor.
}
public String toString() {
return s + i;
}
public void writeExternal(ObjectOutput out)
throws IOException {
System.out.println("Blip3.writeExternal");
// You must do this:
out.writeObject(s);
out.writeInt(i);
}
public void readExternal(ObjectInput in)
throws IOException,
ClassNotFoundException {
System.out.println("Blip3.readExternal");
// You must do this:
s = (String) in.readObject();
i = in.readInt();
}
public static
void main(String[] args) throws IOException,
ClassNotFoundException {
System.out.println("Constructing objects:");
Blip3 b3 = new Blip3("A String ",
47);
System.out.println(b3);
ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream(
"Blip3.out"));
System.out.println("Saving object:");
o.writeObject(b3);
o.close();
// Now get it back:
ObjectInputStream in = new ObjectInputStream(new FileInputStream(
"Blip3.out"));
System.out.println("Recovering b3:");
b3 = (Blip3) in.readObject();
System.out.println(b3);
}
}
相关文章推荐
- 转载 java控制对象的序列化和反序列化
- java对象和内存的控制深入浅出
- Java对象的序列化和反序列化实践
- Java必备:对象的序列化
- Java对象序列化
- Java对象序列化工具类
- Java对象序列化和反序列化
- java 对象序列化
- Java对象的序列化和反序列化
- 关于 Java 对象序列化您不知道的 5 件事
- 关于Java对象序列化您不知道的5件事
- 对象序列化(三):控制序列化过程
- Java深拷贝除了通过实现Cloneable接口,另外还可以通过序列化实现对象的拷贝。
- 使用XStream把Java对象序列化为XML
- java 对象序列化与反序列化 FileInputSteam.readObject,writeObject
- java提高篇(六)-----使用序列化实现对象的拷贝
- java 学习笔记11之对象序列化
- Java 对象序列化和操作文件 正则表达式
- java中对象的序列化与反序列化
- Java基础学习总结——Java对象的序列化和反序列化