私はそう深く印象にそれを書き留めてみたかった、今日、オブジェクトの直列化に教科書におけるオブジェクト直列化に関する鋸何かをブログ記事をオフに仕上げた前に
オブジェクトが逆シリアル化されるのに対し、1オブジェクトオブジェクトのシリアル化は、バイト列に変換される
1シリアル化ストリーム(ObjectOutputStreamの)、濾過流量)
にObjectOutputStreamのwriteObject(Object)をシリアル化オブジェクト
のObjectInputStreamのreadObject()オブジェクトが逆シリアル化された
2)の配列インタフェース(直列化可能)
オブジェクトが直列化される「シリアルインタフェース」を実装しなければならない、またはできないシリアル化例外が表示されます!
シリアライズはない方法のみシリアライズ識別子として、存在しない、空のインタフェースである
3)JavaBeanの仕様、Javaクラスがシリアライズインタフェースを実装しなければならない
APIのクラスは、ほとんどのJavaのJava Beanの仕様に沿ったものであり、基本的に実現シリアライズ
4 )シリアライゼーションおよびデオブジェクトが実装するオブジェクトのディープコピーを隠すことができる
ケース1:
public static void main(String[] args) throws Exception {
String file ="F:/temp/obj.dat";
//1.对象序列化
FileOutputStream fos=new FileOutputStream(file);
ObjectOutputStream out=new ObjectOutputStream(fos);
Foo foo=new Foo();
foo.setAge("12");
foo.setSex("男");
Foo f2=new Foo();
f2.setAge("24");
f2.setSex("女");
out.writeObject(foo);//序列化,将对象写入到流中
out.writeObject(f2);
out.close();
//2.对象的反序列化
FileInputStream fis=new FileInputStream(file);
ObjectInputStream in=new ObjectInputStream(fis);
Foo f=(Foo) in.readObject();
Foo ff=(Foo) in.readObject();
System.out.println(f.getAge()+" ;;"+ff.getAge());
//f是foo的深层复制
System.out.println(f==foo);//false
in.close();
}
2.コピー浅いと深いコピー*
1)は、Javaのデフォルトのルールが浅いコピー、良好なパフォーマンスですが、アイソレーションが悪いコピーします。現象の浅いコピーは、対象物の第1層のみコピー
)2ディープコピーのシリアル化を使用して達成することができます
ケース2:
public static Object deppClone(Object obj) throws Exception{
try {
//1.对象序列化
//缓冲流:字节数组输出流
ByteArrayOutputStream buf=new ByteArrayOutputStream();
//对象输出流
ObjectOutputStream out =new ObjectOutputStream(buf);
out.writeObject(obj);//序列化对象到buf中
out.close();
//2.对象反序列化
byte[]ary =buf.toByteArray();
ByteArrayInputStream bais=new ByteArrayInputStream(ary);
ObjectInputStream in=new ObjectInputStream(bais);
Object o=in.readObject();//从ary反序列化
in.close();
return o;
} catch (Exception e) {
e.printStackTrace();
throw new Exception();
}
}