當前位置:編程學習大全網 - 編程語言 - 如何保證socket傳輸中java對象序列化和反序列化過程中數據的完整性

如何保證socket傳輸中java對象序列化和反序列化過程中數據的完整性

ObjectInputStream和ObjectOutputStream是兩個包裝器類,用於從底層輸入流讀取對象類型的數據,並將對象類型的數據寫入底層輸出流。保存對象中所有成員變量的值相當於保存對象,恢復對象中所有成員變量的值相當於讀取對象。

由ObjectInputStream和ObjectOutputStream類讀寫的對象必須實現Serializable接口。Transient(表示變量是臨時的標誌)和對象中靜態類型的成員變量將不會被讀寫。這兩個類可用於在網絡流中傳輸對象。

(transient:Java語言的關鍵字,變量修飾符。如果用transient聲明實例變量,則在存儲對象時不需要維護它的值。

Java的序列化提供了壹種持久化對象實例的機制。壹個對象持久化的時候,可能會有壹個特殊的對象數據成員,我們不想用序列化機制來保存。為了在特定對象的域上關閉序列化,可以在該域之前添加關鍵字transient。當對象被序列化時,瞬態變量的值不包括在序列化表示中,但包括非瞬態變量。)

可以序列化的MyClass類的定義:

公共類MyClass實現Serializable{

公共瞬態線程t;//t不會被序列化。

私有字符串customerID

私人利息總額;

}

編程示例:創建壹個可序列化的student對象,用ObjectOutputStream類將其存儲在壹個文件(mytext.txt)中,然後用ObjectInputStream類將存儲的數據讀入壹個student對象中,即恢復保存的student對象。

[java]查看純文本

導入Java . io . *;

Class student實現Serializable//必須實現Serializable接口才能序列化。

{

int age

字符串名稱;

學生(整數,字符串名稱){

this.age =年齡;

this.name = name

}

}

公共類Iotest {

/**

* @param args

*/

公共靜態void main(String[] args) {

// TODO自動生成的方法存根

學生stu1 =新生(20,“張三”);

學生stu2 =新生(22,“Lisi”);

嘗試{

file output stream fos = new file output stream(" a . txt ");

object output stream OOS = new object output stream(fos);

OOS . writeobject(stu 1);

OOS . writeobject(stu 2);

OOS . close();

file inputstream fis = new file inputstream(" a . txt ");

ObjectInputStream ois =新的ObjectInputStream(fis);

學生stu3 =(學生)ois . read object();

system . out . println(" age:"+stu 3 . age);

system . out . println(" name:"+stu 3 . name);

} catch(file not found exception e){

// TODO自動生成的catch塊

e . printstacktrace();

} catch (IOException e) {

// TODO自動生成的catch塊

e . printstacktrace();

} catch(ClassNotFoundException e){

// TODO自動生成的catch塊

e . printstacktrace();

}

}

}

  • 上一篇:曬曬我們班的“牛人”作文
  • 下一篇:筆記本顯示系統不是正版wifi總斷怎麽辦
  • copyright 2024編程學習大全網