什么是Java序列化、為什么要序列化、JAVA序列化有哪些方式(性能由低至高)


  先普及一下,計算機中無法識別一個基本單元【字節】來表示,必須經過“翻譯”才能讓計算機理解人類的語言,這個翻譯過程就是【編碼】,通常所說的字符轉換為字節。  有I/O的地方機就會涉及編碼,現在幾乎所有的應用程序都涉及網絡I/O和磁盤I/O,而數據傳輸時都是以字節為單位的,所以所有的數據都必須能夠序列化為字節。  

 

什么是Java序列化?

簡單來說 序列化就是把Java對象儲存在某一地方(硬盤、網絡),也就是將對象的內容進行流化。

反序列化:就是把二進制數據反序列化成對象數據

 

為什么要序列化?
方便於傳輸、存儲(內存中的對象狀態保存到一個文件中或者數據庫中;套接字在網絡上傳送對象;RMI)。

 

JAVA序列化有哪些方式(性能由低至高)
Java Serialization(主要是采用JDK自帶的Java序列化實現,性能很不理想)
Json(目前有兩種實現,一種是采用的阿里的fastjson庫,另一種是采用dubbo中自己實現的簡單json庫)
FastJson(阿里的fastjson庫)
Hession(它基於HTTP協議傳輸,使用Hessian二進制序列化,對於數據包比較大的情況比較友好。)
Dubbo Serialization(阿里dubbo序列化)
FST(高性能、序列化速度大概是JDK的4-10倍,大小是JDK大小的1/3左右)
Kryo


重點說下 FST的用法——>開源中國:http://www.oschina.net/p/fst
<dependency>  
  <groupId>de.ruedigermoeller</groupId>  
  <artifactId>fst</artifactId>  
  <version>2.04</version>  
</dependency> 
// ! reuse this Object, it caches metadata. Performance degrades massively
// if you create a new Configuration Object with each serialization !
static FSTConfiguration conf = FSTConfiguration.createDefaultConfiguration();
...
public MyClass myreadMethod(InputStream stream) throws IOException, ClassNotFoundException
{
    FSTObjectInput in = conf.getObjectInput(stream);
    MyClass result = in.readObject(MyClass.class);
    // DON'T: in.close(); here prevents reuse and will result in an exception      
    stream.close();
    return result;
}

public void mywriteMethod( OutputStream stream, MyClass toWrite ) throws IOException 
{
    FSTObjectOutput out = conf.getObjectOutput(stream);
    out.writeObject( toWrite, MyClass.class );
    // DON'T out.close() when using factory method;
    out.flush();
    stream.close();
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM