java中的序列化
java中的序列化是一個很有意思的介面,只需要宣告而無需做額外的工作,但是在虛擬機器內部卻做了大量的工作保證了這一特點。只要物件實現了序列化介面,就會把它轉換為一個位元組序列,當需要的時候能夠把這個位元組序列完全恢復為原來的物件。這一過程是可以透過遠端呼叫,網路進行,所以說從某種程度而言,序列化能夠實現輕量級的持久化。
我們透過一個簡單的程式來模擬說明,
假設我們需要列印張大爺的銀行流水資訊。
我們定義一個銀行流水類,存錢類,取錢類
這裡存錢的過程我們可以理解為序列化。
取錢的過程我們可以理解為反序列化。
這兩個過程在這個例子中式完全獨立的。
銀行流水類
存錢類
取錢類
在這個過程中,張大爺存了一筆錢,這些資訊對於取錢類是完全遮蔽的。
我們執行一下存錢類,先存入一筆錢
[ora11g@rac1 test]$ $ORACLE_HOME/jdk/bin/java Topup
Mr Zhang top up amount: 1005.0
這個時候會生成一個檔案,Bank_trxs
透過strings得到的內容如下,因為這個檔案是二進位制檔案,透過strings得到的內容還是能夠看出一些眉目來。
[ora11g@rac1 test]$ strings Bank_trxs
Bank_Transaction
amountL
customer_namet
Ljava/lang/String;xp@
Mr Zhang
這個時候我們執行取錢類來看看,取錢的時候發現當時存了1005
[ora11g@rac1 test]$ $ORACLE_HOME/jdk/bin/java Withdraw
Mr Zhang withdraw amount: 1005.0
java的這種持久化機制會在虛擬機器內部實現,反序列化也只有java自身才能實現,這也是Java的一種持久化方案吧,對於更具有互操作性的方案就是xml,畢竟xml還是通用並且普遍使用的一種檔案格式。
序列化在其它軟體中也有體現,在Hadoop中的實現據稱更加輕量級,簡便,我們在後面繼續討論。
我們透過一個簡單的程式來模擬說明,
假設我們需要列印張大爺的銀行流水資訊。
我們定義一個銀行流水類,存錢類,取錢類
這裡存錢的過程我們可以理解為序列化。
取錢的過程我們可以理解為反序列化。
這兩個過程在這個例子中式完全獨立的。
銀行流水類
點選(此處)摺疊或開啟
-
import java.io.Serializable;
-
-
public class Bank_Transaction implements Serializable {
-
-
private String customer_name;
-
-
private double amount ;
-
-
public String getCustomer_name() {
-
return customer_name;
-
}
-
-
public void setCustomer_name(String customer_name) {
-
this.customer_name = customer_name;
-
}
-
-
public double getAmount() {
-
return amount;
-
}
-
-
public void setAmount(double amount) {
-
this.amount = amount;
-
}
-
-
- }
存錢類
點選(此處)摺疊或開啟
-
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
public class Topup {
public static void main(String[] args) throws Exception {
Bank_Transaction bank_trx_write = new Bank_Transaction();
bank_trx_write.setAmount(1005);
bank_trx_write.setCustomer_name("Mr Zhang");
FileOutputStream fos = new FileOutputStream("Bank_trxs",false);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(bank_trx_write);
oos.close();
fos.close();
System.out.println(bank_trx_write.getCustomer_name()+" top up amount: "+bank_trx_write.getAmount());
}
}
取錢類
點選(此處)摺疊或開啟
-
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Withdraw {
public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream("Bank_trxs");
ObjectInputStream ois = new ObjectInputStream(fis);
Bank_Transaction bank_trx_read;
bank_trx_read =(Bank_Transaction) ois.readObject();
System.out.println(bank_trx_read.getCustomer_name()+" withdraw amount: "+bank_trx_read.getAmount());
ois.close();
fis.close();
}
}
在這個過程中,張大爺存了一筆錢,這些資訊對於取錢類是完全遮蔽的。
我們執行一下存錢類,先存入一筆錢
[ora11g@rac1 test]$ $ORACLE_HOME/jdk/bin/java Topup
Mr Zhang top up amount: 1005.0
這個時候會生成一個檔案,Bank_trxs
透過strings得到的內容如下,因為這個檔案是二進位制檔案,透過strings得到的內容還是能夠看出一些眉目來。
[ora11g@rac1 test]$ strings Bank_trxs
Bank_Transaction
amountL
customer_namet
Ljava/lang/String;xp@
Mr Zhang
這個時候我們執行取錢類來看看,取錢的時候發現當時存了1005
[ora11g@rac1 test]$ $ORACLE_HOME/jdk/bin/java Withdraw
Mr Zhang withdraw amount: 1005.0
java的這種持久化機制會在虛擬機器內部實現,反序列化也只有java自身才能實現,這也是Java的一種持久化方案吧,對於更具有互操作性的方案就是xml,畢竟xml還是通用並且普遍使用的一種檔案格式。
序列化在其它軟體中也有體現,在Hadoop中的實現據稱更加輕量級,簡便,我們在後面繼續討論。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1448633/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java中的序列化與反序列化Java
- Java的序列化和反序列化Java
- Java的序列化與反序列化Java
- java的序列化SerializableJava
- Java 中的 transient 關鍵字和物件序列化Java物件
- JDK 17中的 java序列化過濾器 – InsideJDKJava過濾器IDE
- 面試問你java中的序列化怎麼答?面試Java
- Java審計之CMS中的那些反序列化漏洞Java
- java序列化Java
- java培訓教程分享:Java中怎樣將資料物件序列化和反序列化?Java物件
- Java序列化的狀態Java
- Java序列化、反序列化、反序列化漏洞Java
- 從java的序列化和反序列化說起Java
- Java物件的序列化與反序列化-Json篇Java物件JSON
- Java物件的序列化和反序列化實踐Java物件
- Tinking in Java ---Java的NIO和物件序列化Java物件
- 什麼是Java序列化,如何實現java序列化Java
- Java安全基礎之Java序列化與反序列化Java
- hadoop中的序列化Hadoop
- 談談 JAVA 的物件序列化Java物件
- Java序列化流的奇妙之旅Java
- java反序列化Java
- [Java基礎]序列化和反序列化Java
- 淺談Java序列化Java
- Java基礎——序列化Java
- java自定義序列化Java
- common-collections中Java反序列化漏洞導致的RCE原理分析Java
- 從反序列化到命令執行 - Java 中的 POP 執行鏈Java
- 好程式設計師Java學習路線之Java中的物件流和序列化程式設計師Java物件
- Python中序列化/反序列化JSON格式的資料PythonJSON
- 什麼是Java序列化?如何實現序列化?Java
- 為什麼Java需要物件的序列化Java物件
- 關於對於Java中Entity以及VO,以及DTO中Request物件序列化的學習Java物件
- Swift 中的 JSON 反序列化SwiftJSON
- Java中列舉的執行緒安全性及序列化問題Java執行緒
- 關於metaspolit中進行JAVA反序列化滲透RMI的原理分析Java
- 深入理解 Java 序列化Java
- Java序列化是什麼Java
- java反序列化基礎Java