网站建设精美模板下载,邢台165信息交友,中国工程监理人才网,营销型电子商务网站特点总览 Chronicle Wire旨在在简化开发和加快调试方面获得文本协议的好处#xff0c;但能够在不更改代码的情况下切换到性能更高且更小的二进制协议。 在这篇文章中 #xff0c;我研究了使用基于YAML的文本格式进行序列化#xff0c;反序列化可能会实现的性能。 不错的功能之一… 总览 Chronicle Wire旨在在简化开发和加快调试方面获得文本协议的好处但能够在不更改代码的情况下切换到性能更高且更小的二进制协议。 在这篇文章中 我研究了使用基于YAML的文本格式进行序列化反序列化可能会实现的性能。 不错的功能之一是您可以使用YAML进行测试调试但在有意义的地方切换到Binary YAML。 甚至可以在单个流中混合和匹配。 例如当您确定两端兼容时使用YAML进行握手并切换到Binary YAML甚至其他格式。 代码是什么样的 首先您需要有一个要写入的缓冲区。 这可以是一个byte []一个ByteBuffer堆外内存甚至可以是从其他库中获得的地址和长度。 // Bytes which wraps a ByteBuffer which is resized as needed.
BytesByteBuffer bytes Bytes.elasticByteBuffer(); 现在您可以选择要使用的格式。 由于连线格式本身是无缓冲的因此可以将它们与相同的缓冲区一起使用但是通常使用一种连线格式会更容易。 Wire wire new TextWire(bytes);
// or
BytesByteBuffer bytes2 Bytes.elasticByteBuffer();
Wire wire2 new BinaryWire(bytes2);
// or
BytesByteBuffer 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