java的序列化使用場景
java的序列化思想是通過序列化將對象轉(zhuǎn)換為字節(jié)流,然后通過反序列能將字節(jié)流翻譯為對象。那么java序列化得使用場景是怎樣的呢?
1、對象保存在文件中,需要對其序列化反序列化
2、對象在網(wǎng)絡(luò)通訊中,需要將其轉(zhuǎn)換為字節(jié)流在網(wǎng)絡(luò)中傳播,然后通過反序列化在對端將字節(jié)流翻譯為某個對象
java序列化的實(shí)現(xiàn)
若對象需要實(shí)現(xiàn)序列化,則需要實(shí)現(xiàn)Serializable或者Externalnalizable借口。
java.io.ObjectIoOutput中的writeObject(Object obj)方法實(shí)現(xiàn)序列化,將對象序列化為字節(jié)流
java.io.ObjectIoInput中的readObject()方法可以將字節(jié)流字段反序列化為對象
1、僅僅實(shí)現(xiàn)Serializable接口
序列化時:調(diào)用默認(rèn)的writeObject接readObject方法實(shí)現(xiàn)序列化
2、不僅實(shí)現(xiàn)Serializable接口,同時還重寫了writeObject和readObject方法
序列化是:調(diào)用重寫的writeObject和readObject方法實(shí)現(xiàn)序列化
3、實(shí)現(xiàn)了Externalnalizable接口則必須定義readExternal()和writeExternal()方法
java序列化的例子
public class Test implements Serializable
{
private String name;
private String value;
public Test(String name, String value)
{
this.name = name;
this.value = value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
public class TestSerializable
{
Test test = new Test("a", "ba");
File file = new File("d:\\test.txt");
//序列化
FileOutputStream fileOutput = new FileOutputStream(file);
ObjectOutputStream output = new ObjectOutputStream(fileOutput);
output.writeObject(test);
output.flush();
output.close();
fileOutput.close();
//反序列化
FileOutputStream fileInput = new FileOutputStream(file);
ObjectOutputStream input = new ObjectOutputStream();
Test outTest = (Test)input.readObject(file);
input.close();
fileInput.close();
}