關於java中的對象序列化

java對象序列化機制一般來講有兩種用途:

1.需要將對象的狀態保存到文件中,而後能夠通過讀入對象狀態來重新構造對象,恢復程序狀態

2.使用套接字在網絡上傳送對象的程序來說,是很有用的。

我們通過讓類實現java.io.Serializable 接口可以將類序列化。這個接口是一個製造者(marker)接口。也就是說,對於要實現它的類來說,該接口不需要實現任何方法。它主要用來通知Java虛擬機(JVM),需要將一個對象序列化。

對於這個,有幾點我們需要明確:

1.並非所有類都可以序列化,在cmd下,我們輸入serialver java.net.socket,可以得到socket是否可序列化的信息,實際上socket是不可序列化的。

2.java有很多基礎類已經實現了serializable接口,比如string,vector等。但是比如hashtable就沒有實現serializable接口。

將對象讀出或者寫入流的主要類有兩個: ObjectOutputStream與ObjectInputStream 。ObjectOutputStream 提供用來將對象寫入輸出流的writeObject方法, ObjectInputStream提供從輸入流中讀出對象的readObject方法。使用這些方法的對象必須已經被序列化的。也就是說,必須已經實現Serializable接口。如果你想writeobject一個hashtable對象,那麼,會得到一個異常。

下面舉個例子:

import java.io.*;

public class testser implements Serializable {

public int ii;

testser() {

}

testser( int param ) {

ii = param;

}

}

testser是一個實現了serializable接口的類。

讀寫這個序列化過的類:

import java.io.*;

public class Ser {

private static String datafile;

datafile="ser.data";

public static void main( String[] argv ) {

System.out.println( "Java Serialization Demo." );

SerData data;

try {

ObjectInputStream in = new ObjectInputStream( new FileInputStream( datafile ));

data = (SerData) in.readObject();

in.close();

}

catch (Exception e) {

data = new testser();

}

System.out.println( "Original data: ii = " + data.ii );

data.ii++;

try {

ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream( datafile ) );

out.writeObject( data );

out.flush();

out.close();

}

catch (Exception e) {

System.out.println( e );

}

}

}

還有可以通過套接字傳遞序列化對象,大概類似,不再贅述。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章