Kryo 2.23 發布,高性能 Java 序列化庫

2021-01-08 開源中國

Kryo 2.23 發布了,該版本主要是 bug 修復,包括:

Fix #183 Problem with inner classes of a generic class (f9cb9ea)

Fix #176 Remove unused "kryo" fields from a number of classes. (77e319f)

Fix #168 Infinite loop while extending buffer (82d134d)

Fix #100 Serialization for java.util.Locale under java 1.7 is broken

Fix #88 Serialization of java.sql.Timestamp

Fix #161 Option for ByteBufferOutput#require to allocate a heap buffer (faf05e0)

Add a possibility to set a custom InstantiationStrategy (see issue #138) (9f0bfa7)

Fix #153 Update objenesis to latest version (2.1) (1fc2dc8)

Fix #140 Add optional OSGI imports for sun.misc and sun.nio.ch (a59cef6)

Fix #156 Depend on minlog and objenesis as standard dependencies (f212086)

Fix #158 FieldSerializer serializes removed fields in some situations (fa2f729)

Some progress on #149: Make ObjectField versions for primitive types work in the same way as AsmCacheField and UnsafeCacheField (a137238)

Fix #155 Test with double array fails (adf0576)

Fix java.misc.Unsafe probing. Do not re-throw any exceptions. (bb40b1f)

Made references optional for copying. (0a1c7e3)

Fix #154 Kryo ignores the KryoSerializable interface on objects of class which implement Map interface (0234f8c)

Fix issues #148 and #83 FieldSerializer copies transient fields / Copy should not ignore transient fields (cd79d91)

Fix #145 IntMap toString should not ignore 0 as a key (0dbbc2f)

Fix #142 Change type (int->long) of field total in class Output return int (859de2e)

Fix #144 IntMap.clear() does not work as expected (a0da819)

Fix #139 Kryo gets ClassCastException when deserializing TreeSet with Comparator (Kryo gets ClassCastException when deserializing TreeSet with Comparator) (0b9d117)

Fix #91 Properly serialize empty EnumSets (08db0d8)

Kryo 是一個快速高效的Java對象圖形序列化框架,主要特點是性能、高效和易用。該項目用來序列化對象到文件、資料庫或者網絡。

相關焦點

  • 【Java拾遺】不可不知的 Java 序列化
    ,主要分成如下 2 步:創建對象輸入流創建一個 ObjectInputStream 對象,並把序列化文件通過構造函數傳給它從對象輸入流中讀取對象直接通過 readObject 方法即可,注意讀取後是 Object 類型,後續使用需手動強轉一次到這裡,我們便通過 JDK 原生的方法完成了序列化與反序列化操作,是不是還很簡單。
  • 全方位解析Java序列化
    2) 序列化機制讓Java對象在網絡傳輸不再是天方夜譚。我們在使用Dubbo遠程調用服務框架時,需要把傳輸的Java對象實現Serializable接口,即讓Java對象序列化,因為這樣才能讓對象在網絡上傳輸。
  • 教你徹底學會Java序列化和反序列化
    Java序列化是指把Java對象轉換為字節序列的過程,Java反序列化是指把字節序列恢復為Java對象的過程。反序列化:客戶端重文件,或者網絡中獲取到文件以後,在內存中重構對象。序列化:對象序列化的最重要的作用是傳遞和保存對象的時候,保證對象的完整性和可傳遞性。方便字節可以在網絡上傳輸以及保存在本地文件。
  • Java程式設計師必備:序列化全方位解析
    四、Java序列化常用APIjava.io.ObjectOutputStreamjava.io.ObjectInputStreamjava.io.Serializablejava.io.ExternalizableSerializable 接口Serializable接口是一個標記接口,沒有方法或欄位。
  • Java反序列化漏洞從理解到實踐
    利用某個反序列化漏洞。2. 自己手動創建利用載荷。更具體一點,首先我們會利用現有工具來實際操作反序列化漏洞,也會解釋操作的具體含義,其次我們會深入分析載荷相關內容,比如什麼是載荷、如何手動構造載荷等。完成這些步驟後,我們就能充分理解載荷的工作原理,未來碰到類似漏洞時也能掌握漏洞的處理方法。
  • JAVA反序列化—FastJson抗爭的一生
    = JSON.parseObject(serializedStr);System.out.println("parseObject反序列化對象名稱:"+obj2.getClass.getName);System.out.println("parseObject反序列化:"+obj2); //通過parseObject,指定類後返回的是一個相應的類對象
  • 關於 Java 序列化你不知道的 5 件事
    這是一個優雅的、開放式的設置系統,但是,當團隊決定從 Hashtable 遷移到 Java Collections 庫中的HashMap 時,這個系統便面臨崩潰。Hashtable 和 HashMap 在磁碟上的格式是不相同、不兼容的。
  • 明晰 | Java序列化與反序列化
    實戰含義序列化:對象寫入IO流中,實現對象變成文件。反序列化:把文件中的對象,進行恢復,恢復到內存中,實現反序列化。意義:序列化的最大的意義在於實現對象可以跨主機進行傳輸,這些對象可以實現保存在磁碟中,並且脫離程序而獨立存在。
  • 阿里面試官:你了解Java Unsafe類嗎?|java|字符串|調用|實例化|...
    11、快速序列化  每個人都知道java標準的序列化的功能速度很慢而且它還需要類擁有公有的構造函數。  外部序列化是更好的方式,但是需要定義針對待序列化類的schema。  非常流行的高性能序列化庫,像kryo是有使用限制的,比如在內存缺乏的環境就不合適。
  • java序列化反序列化中serialVersionUID到底有什麼用
    序列化\反序列化:java序列化是指把java對象轉換為字節序列的過程,而java反序列化是指把字節序列恢復為java對象的過程。用途:當兩個進程進行遠程通信時,可以相互發送各種類型的數據,包括文本,圖片,音頻,視頻等,而這些數據都會以二進位的形式在網絡上傳送;當兩個java進行進行通信時,要傳送對象,怎麼傳對象,通過序列化與反序列化;永久性保存對象,保存對象的字節序列到本地文件或者資料庫中,實現了數據的持久化;利用序列化實現遠程通信,可以在網絡上傳送對象的字節序列
  • 文庫 | 反序列化漏洞匯總
    尤其是當使用具有二進位序列化格式的語言時,開發人員可能會認為用戶無法有效讀取或操縱數據。但是,儘管可能需要付出更多的努力,但攻擊者仍有可能利用二進位序列化的對象,就象利用基於字符串的格式一樣。由於現代網站中存在大量依賴關係,因此基於反序列化的攻擊也成為可能。一個典型的站點可能會實現許多不同的庫,每個庫也都有自己的依賴性。
  • 為什麼Java中序列化的SerialVersionUID總是無意義的?
    一、serialVersionUID的作用通過java進行網絡之間的數據傳輸是不能直接把對象進行傳的,需要在發送端把數據切分,在接收端對切分的數據進行重裝。這種切分和重裝的方式就叫做序列化。(2)指定serialVersionUID這個情況就不展示了,不斷你之前添加了多少個欄位,或者進行更改,因為serialVersionUID唯一,因此反序列化都不會出現錯誤。
  • 阿里面試官:你了解Java Unsafe類嗎?
    1、Info 僅僅是返回一個低級別的內存相關的信息addressSizepageSize  2、Objects. 提供操作對象和對象欄位的方法allocateInstanceobjectFieldOffset  3、Classes.
  • 什麼是序列化,怎麼序列化,為什麼序列化,反序列化會遇到什麼問題,如何解決.
    ;        return pig;    }}對上面的2個操作文件流的類的簡單說明ObjectOutputStream代表對象輸出流:它的writeObject:699) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1885) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751) at java.io.ObjectInputStream.readOrdinaryObject
  • 支付寶面試:什麼是序列化,怎麼序列化,為什麼序列化,反序列化會遇到什麼問題,如何解決?
    ; return pig; }}對上面的2個操作文件流的類的簡單說明ObjectOutputStream代表對象輸出流:699) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1885) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751) at java.io.ObjectInputStream.readOrdinaryObject(
  • 一文帶你全面了解Java 序列化
    Java序列化是指把Java對象轉換為字節序列的過程;Java反序列化是指把字節序列恢復為Java對象的過程;2. 為什麼要序列化?JDK類庫中序列化和反序列化APIjava.io.ObjectInputStream:對象輸入流該類中的readObject()方法從輸入流中讀取字節序列,然後將字節序列反序列化為一個對象並返回。
  • Java安全之反序列化漏洞分析
    在Java中,只要一個類實現了java.io.Serializable接口,那麼它就可以通過ObjectInputStream與ObejctOutputStream序列化,如下我們模擬了Session對象持久化存儲與從磁碟加載的過程:結合注釋,這段測試代碼應該不難理解,我們可以看到Java對象序列化就依賴於ObejctOutputStream的writeObject
  • Java程式設計師必備學習資源大全(五)
    原生開發庫用來進行特定平臺開發的原生開發庫。JNA:不使用JNI就可以使用原生開發庫。此外,還為常見系統函數提供了接口。自然語言處理用來專門處理文本的函數庫。Apache OpenNLP:處理類似分詞等常見任務的工具。
  • 深入學習 Java 序列化
    package com.beautyboss.slogen; import java.io.可以看到ObjectStreamClass這個是類的序列化描述符,這個類可以描述需要被序列化的類的元數據,包括被序列化的類的名字以及序列號。可以通過lookup()方法來查找/創建在這個JVM中加載的特定的ObjectStreamClass對象。2.
  • Oracle:Java 的序列化就是個錯誤,我們要刪掉它!
    近日,據外媒InfoWorld報導稱,Oracle正計劃從Java中去除序列化特性,一直以來,這在安全方面都是一個棘手的問題。該功能也稱為「對象序列化」,主要將對象編碼為字節流形式。除了用於輕量化持久性,以及通過套接字或Java RMI進行通信之外,序列化功能還支持從字節流中重構對象圖。