日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用Chronicle Wire将YAML连接到文件或网络

發布時間:2023/12/3 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Chronicle Wire将YAML连接到文件或网络 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

總覽

Chronicle Wire旨在在簡化開發和加快調試方面獲得文本協議的好處,但能夠在不更改代碼的情況下切換到性能更高且更小的二進制協議。

在這篇文章中 ,我研究了使用基于YAML的文本格式進行序列化,反序列化可能會實現的性能。 不錯的功能之一是您可以使用YAML進行測試,調試,但在有意義的地方切換到Binary YAML。

甚至可以在單個流中混合和匹配。 例如,當您確定兩端兼容時,使用YAML進行握手,并切換到Binary YAML甚至其他格式。

代碼是什么樣的?

首先,您需要有一個要寫入的緩沖區。 這可以是一個byte [],一個ByteBuffer,堆外內存,甚至可以是從其他庫中獲得的地址和長度。

// Bytes which wraps a ByteBuffer which is resized as needed. Bytes<ByteBuffer> bytes = Bytes.elasticByteBuffer();

現在,您可以選擇要使用的格式。 由于連線格式本身是無緩沖的,因此可以將它們與相同的緩沖區一起使用,但是通常使用一種連線格式會更容易。

Wire wire = new TextWire(bytes); // or Bytes<ByteBuffer> bytes2 = Bytes.elasticByteBuffer(); Wire wire2 = new BinaryWire(bytes2); // or Bytes<ByteBuffer> bytes3 = Bytes.elasticByteBuffer(); Wire wire3 = new RawWire(bytes3);

有很多選項,例如您是否想要像protobuf或SBE這樣的數字字段,還是要使用可變(最小)或固定長度(最快)的數據值。

要寫出一個對象,可以使它成為可編組對象,并定義一個readmarshallable和writeMarshallable對象,但是現在讓我們只寫一些數據即可。
使用TextWire可以打印:

wire.write(() -> "message").text("Hello World").write(() -> "number").int64(1234567890L).write(() -> "code").asEnum(TimeUnit.SECONDS).write(() -> "price").float64(10.50); System.out.println(bytes);// to obtain the underlying ByteBuffer to write to a Channel ByteBuffer byteBuffer = bytes2.underlyingObject(); byteBuffer.position(0); byteBuffer.limit(bytes2.length());

但是,請改用BinaryWire并寫入(以十六進制打印時):

message: Hello World number: 1234567890 code: SECONDS price: 10.5

但是,請改用BinaryWire并寫入(以十六進制打印時):

00000000 C7 6D 65 73 73 61 67 65 EB 48 65 6C 6C 6F 20 57 ·message ·Hello W 00000010 6F 72 6C 64 C6 6E 75 6D 62 65 72 A3 D2 02 96 49 orld·num ber····I 00000020 C4 63 6F 64 65 E7 53 45 43 4F 4E 44 53 C5 70 72 ·code·SE CONDS·pr 00000030 69 63 65 90 00 00 28 41 ice···(A

使用BinaryWire的大小可能是其一半,速度是其兩倍,但是我們可以選擇使用RawWire,它會刪除所有元數據,并且可以比計劃文本快8倍。

  • 有關更多示例和文檔,請參閱《編年史》的主要自述文件。 使用編年史線的其他例子 。

結論

盡管二進制協議可以更快,但使用起來卻困難得多。 如果可以使用文本格式,則可以更快地開發和調試,但是如果可以選擇動態切換,則可以在需要時選擇性能。

即使TextWire花費不到5微秒的時間,在99.99%的寫入時間中讀取6個字段對象,對于許多應用程序而言,這可能也足夠快。

有用的是,如果需要,可以選擇加快運行速度。 RawWire在99.99%的時間內不到600納秒,而無需更改代碼。

如果需要最大速度,我們有一個帶精簡API的BytesMarshallable接口,在99.99%的時間內不到220納秒。

翻譯自: https://www.javacodegeeks.com/2015/08/wiring-yaml-to-a-file-or-network-with-chronicle-wire.html

總結

以上是生活随笔為你收集整理的使用Chronicle Wire将YAML连接到文件或网络的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。