高效能Java不同格式的序列化Chronicle Wire
Java 序列化是一種流行的機制,您可以在其中序列化和反序列化複雜的物件圖,Chronicle Wire是一個開源庫,最初是為了支援 Chronicle Queue 和 Chronicle Map 而編寫的。但是,該庫在任何使用序列化的程式碼中都很有用。Chronicle Wire 與原生 Java 序列化的不同之處在於它實際上支援多種不同的格式,例如二進位制、YAML、JSON、原始二進位制資料和 CSV。
Chronicle Wire 背後的真正創新在於您無需更改程式碼即可更改編碼。該庫將序列化的實現抽象為可插入的 Wire 實現。這個想法是您的物件只需要描述要序列化的內容,而不是應該如何序列化。這是由實現 Marshallable 介面的物件(要序列化的 POJO)完成的:“net.openhft.chronicle.wire.Marshallable”(當您使用 Java 序列化時,您在“java.io.Serializable”上新增標記介面。)
Chronicle Wire 有多種實現方式,每種實現方式都適用於不同的場景。例如,當我們想要提供應用程式配置檔案或建立資料驅動的測試時,我們經常希望將物件序列化或反序列化為 YAML、JSON 等人類可讀格式。還能夠傳送序列化為型別化 JSON 的 java 物件允許我們從應用程式的 JavaScript UI 層傳送和接收訊息。有時,能夠在編碼格式之間進行互操作很重要。
一個例子是開源產品 Chronicle Queue。Chronicle Queue 使用 Chronicle Wire 的緊湊二進位制格式儲存其資料。然後它讀取二進位制資料,然後通常以人類可讀的 YAML 格式將其記錄到控制檯。這對於除錯或合規性報告很有用。人類可讀格式示例讓我們看一個示例,其中 Chronicle Wire 將資料編碼為簡單的人類可讀格式。我們使用以下 DTO:
請參閱 WireExamples1.java
package net.openhft.chronicle.wire; import net.openhft.chronicle.core.pool.ClassAliasPool; import static net.openhft.chronicle.bytes.Bytes.allocateElasticOnHeap; public class WireExamples { public static class Car implements Marshallable { private int number; private String driver; public Car(String driver, int number) { this.driver = driver; this.number = number; } } public static void main(String... args) { // allows the the YAML to refer to car, rather than net.openhft.chronicle.wire.WireExamples$Car ClassAliasPool.CLASS_ALIASES.addAlias(Car.class); Wire wire = new YamlWire(allocateElasticOnHeap()); wire.getValueOut().object(new Car("Lewis Hamilton", 44)); System.out.println(wire); } } |
如果允許這段程式碼,輸出:
!Car { number: 44, driver: Lewis Hamilton } |
改為JSON Wire:
Wire wire = new JSONWire(allocateElasticOnHeap()); |
這就會輸出:
{"number":44,"driver":"Lewis Hamilton"} |
更多點選標題,文件: Chronicle Wire
相關文章
- Java C++ 讀寫檔案大小端格式是不同的JavaC++
- Chronicle事件溯源的最佳實踐事件
- java的序列化Java
- Java的序列化和反序列化Java
- Java的序列化與反序列化Java
- Python中序列化/反序列化JSON格式的資料PythonJSON
- go-wireGo
- Java中的序列化與反序列化Java
- .Net Core 自定義序列化格式
- java的序列化SerializableJava
- java中的序列化Java
- Laravel 7.2.2 關於新的日期序列化格式Laravel
- java序列化Java
- json格式的字串序列化和反序列化的一些高階用法JSON字串
- Java序列化、反序列化、反序列化漏洞Java
- Java序列化的狀態Java
- Java物件的序列化和反序列化實踐Java物件
- 從java的序列化和反序列化說起Java
- Java序列化和hessian序列化的區別Java
- 深入分析Java的序列化與反序列化Java
- Java--序列化與反序列化Java
- 什麼是Java序列化,如何實現java序列化Java
- Java安全基礎之Java序列化與反序列化Java
- Java物件的序列化與反序列化-Json篇Java物件JSON
- Java——transient and 序列化Java
- java物件序列化Java物件
- Serializable java序列化Java
- java反序列化Java
- 【SpringBoot】 中時間型別 序列化、反序列化、格式處理Spring Boot型別
- 談談 JAVA 的物件序列化Java物件
- Java序列化流的奇妙之旅Java
- Tinking in Java ---Java的NIO和物件序列化Java物件
- java 序列化與反序列化例項Java
- [Java基礎]序列化和反序列化Java
- Java序列化(Serializable)與反序列化詳解Java
- java 物件序列化要序列化那些內容Java物件
- 淺談Java序列化Java
- java自定義序列化Java