導航:首頁 > 編程語言 > jsonxmlyaml

jsonxmlyaml

發布時間:2024-12-21 16:04:09

A. java序列化Protostuff和Serializable的區別

序列化就是將Java Object轉成byte[];反序列化就是將byte[]轉成Java Object。
Java自帶序列化機制java.io.Serializable
標識一個對象需要系列化,該對象類型需要實現 Serializable 介面。
1,序列化的類型和反序列化的類型的序列化ID必須一致(遠程信息交換時)。
2,靜態數據不會被序列化,Transient關鍵字修飾的欄位不會被序列化。
3,對象序列化存儲時,兩次存儲相同值對象會有優化(第二次對象寫入會只存儲引用)。
Protostuff是一個序列化庫,支持一下序列化格式:
protobuf
protostuff (native)
graph (protostuff with support for cyclic references. See Serializing Object Graphs)
json
smile (binary json useable from the protostuff-json mole)
xml
yaml (serialization only)
kvp (binary uwsgi header)
序列化
@SuppressWarnings("unchecked")
public static <T> byte[] serialize(T obj) {
Class<T> cls = (Class<T>) obj.getClass();//獲得對象的類;
LinkedBuffer buffer = LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE);//使用LinkedBuffer分配一塊默認大小的buffer空間;
try {
Schema<T> schema = getSchema(cls);//通過對象的類構建對應的schema;
return ProtostuffIOUtil.toByteArray(obj, schema, buffer);//使用給定的schema將對象序列化為一個byte數組,並返回。
} catch (Exception e) {
throw new IllegalStateException(e.getMessage(), e);
} finally {
buffer.clear();
}
}
反序列化
public static <T> T deserialize(byte[] data, Class<T> cls) {
try {
T message = objenesis.newInstance(cls);//使用objenesis實例化一個類的對象;
Schema<T> schema = getSchema(cls);//通過對象的類構建對應的schema;
ProtostuffIOUtil.mergeFrom(data, message, schema);//使用給定的schema將byte數組和對象合並,並返回。
return message;
} catch (Exception e) {
throw new IllegalStateException(e.getMessage(), e);
}
}
優缺點比較:
優點 缺點
Serializable 使用方便,可序列化所有類 速度慢,占空間
Protostuff 速度快,基於protobuf 需靜態編譯

閱讀全文

與jsonxmlyaml相關的資料

熱點內容
qq瀏覽器阻止訪問網路連接網路 瀏覽:573
appstore裡面的廣告怎麼去掉 瀏覽:344
游戲編程需要什麼軟體有哪些 瀏覽:984
微信實名用身份證號碼 瀏覽:381
如何更改配置文件尺寸 瀏覽:484
小米4視頻文件夾 瀏覽:305
圖片旋轉90度代碼 瀏覽:604
c定義了頭文件 瀏覽:473
linuxmint173軟體源 瀏覽:524
寬頻配置文件怎麼打開 瀏覽:608
能夠恢復被刪文件的軟體 瀏覽:805
cnc法蘭克整圓怎麼編程 瀏覽:672
怎麼快速按照文件名設置超鏈接 瀏覽:62
iphone偏好設置的摘要選項卡在哪 瀏覽:358
樂心手環2微信不提醒 瀏覽:413
iphone字幕滾動軟體 瀏覽:687
魔鬼作坊輔助教程 瀏覽:397
wamp配置文件出錯打不開 瀏覽:237
linux連接ntp伺服器配置 瀏覽:879
喵喵錯題app怎麼去筆跡 瀏覽:172

友情鏈接