使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357605.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JSP+JDBC+XML+mysql实现企业电子投票系统

导读:企业电子投票系统主要用来统计网站用户对某个主题或热门话题的意见。决策者通过这些统计数据做出相应的决策。企业电子投票系统是一般网站必备的程序之一,如果网站开发者想了解用户对该网站的意见和建议。他可以设计这样一个投票主题:你认为该网站如何?(A.很好 B.一般…

冒泡排序算法。

冒泡排序算法 题目&#xff1a; 给定7个int类型的数&#xff0c;用冒泡排序实现出来。 code: public class Maopaopaixu { public static void fun() { int arr[] {9,8,6,1,5,3,2}; System.out.println("数组排序前的顺序为:"); for(in…

matlab 无向拓扑图,无向图绘画树状拓扑图算法

基于目前Network项目需要&#xff0c;研究相关树形算法该需求难点如下&#xff1a;1、目前拓扑图是无向图&#xff0c;而树大多数都是基于有向图来画的&#xff0c;无法确定根节点2、网络拓扑中存在回环问题&#xff0c;导致链路可能会存在重叠问题针对问题1&#xff0c;目前根…

Java Mail+MYSQL+Tomcate+jsp实现企业快信系统

导读:首先对企业快信的开发进行了较深入的研究,然后对短信发送与邮件发送原理进行了介绍,接下来对系统的概要设计、功能模块、数据库设计,以及名片夹管理功能与邮件发送功能的具体实现作了细致阐述,最后是系统效果的展示。企业快信系统是一个集短信与邮件为一体的移动商务…

SQL存储过程分页(通用的拼接SQL语句思路实现)

多表通用的SQL存储过程分页 案例一&#xff1a; USE [Community] GO/****** Object: StoredProcedure [dbo].[Common_PageList] Script Date: 2016/3/8 13:44:58 ******/ SET ANSI_NULLS ON GOSET QUOTED_IDENTIFIER ON GOCREATE PROCEDURE [dbo].[Common_PageList] ( tab …

odbc连接oracle失败,大神解答win7系统ODBC无法连接ORACLE的处理方案

随着电脑的使用率越来越高&#xff0c;我们有时候可能会遇到win7系统ODBC无法连接ORACLE问题&#xff0c;如果我们遇到了win7系统ODBC无法连接ORACLE的问题&#xff0c;要怎么处理win7系统ODBC无法连接ORACLE呢&#xff1f;我们只用1)操作系统是Win7 x64&#xff0c;客户端是Or…

spring-mvc教程_使用MVC模式制作游戏-教程和简介

spring-mvc教程游戏开发中一种有用的体系结构模式是MVC&#xff08;模型视图控制器&#xff09;模式。 它有助于分离输入逻辑&#xff0c;游戏逻辑和UI&#xff08;渲染&#xff09;。 在任何游戏开发项目的早期阶段&#xff0c;它的用途很快就会被注意到&#xff0c;因为它可以…

web前端开发需要学什么(包含前端学习路线)

前端开发&#xff0c;做到后面&#xff0c;是可以走很多方向的&#xff1b;但是要保证后期的平滑过度&#xff0c;前期还是要把一些必须的知识搞扎实的&#xff1b;web前端开发需要学什么环境搭建前端环境很好搭建&#xff0c;编辑器浏览器即可。浏览器推荐使用 Chrome行业内主…

2015年必火的五个Html5移动开发工具推荐

NO.1 DCloudHBuilder:基于HTML5开发工具 中文官网&#xff1a;http://www.dcloud.io/ DCloudHBuilder:基于HTML5开发工具是当前最快的HTML开发工具&#xff0c;强大的代码助手帮你快速完成开发&#xff0c;最全的语法库和浏览器兼容 性数据让浏览器碎片化不再头痛&#xff0c…

oracle 库存管理系统,库存管理系统

内容介绍原文档由会员 刘阳 发布库存管理系统页数 14 字数 9186[摘要]库存管理系统是生产、计划和控制的基础。本系统通过对仓库、货位等帐务管理及入&#xff0f;出库类型、入&#xff0f;出库单据的管理&#xff0c;及时反映各种物资的仓储、流向情况&#xff0c;为生产管理和…

想当程序员,如何判断自己是否适合当前端程序员?

说在前面&#xff1a;有粉丝提问说自己并不确定学前端&#xff0c;因为自己还没有工作&#xff0c;想做程序员&#xff0c;想问问做哪个方向比较有前途&#xff1b; 有两三个小伙伴这么问的&#xff0c;感觉很有意义&#xff0c;拿出来单独说说比较好。 目录 程序员有哪些选择&…

从WildFly 9(子系统)中运行OkHttpClient

几天前&#xff0c; WildFly 9发布了&#xff0c;可以肯定的重点之一是Undertow Web子系统中对HTTP / 2.0的支持。 由于Hawkular最近已开始使用WildFly 9&#xff08;从8.2开始&#xff09;作为其基础服务器&#xff0c;因此尝试将http2用于从Hawkular-Wildfly-Monitor客户端到…

oracle19c方言,JFinal框架操作oracle数据库

JFinal框架操作oracle数据库&#xff0c;需要在configPlugin()方法中配置链接oracle数据库的相关配置配置JFinal数据库操作插件&#xff0c;configPlugin方法这里我加载jdbc.properties配置文件实在configConstant加载的Overridepublic void configConstant(Constants me) {loa…

个税社保

资料来源&#xff1a;http://finance.qq.com/cross/20160218/H9cM96A8.html?pgv_refaio2015&ptlang2052转载于:https://www.cnblogs.com/weikang/p/5200832.html

前端程序员如何选择适合自己的培训机构

web前端开发培训哪家好这个主要是根据自己的情况来选择&#xff0c;本篇文章主要分享怎么选择适合自己的培训机构市场上有哪些培训机构以及所在位置既然关心哪家培训机构好&#xff0c;基本都是有报班学习的意向&#xff0c;所以就不多说自学和报班的区别了&#xff1b;我是不排…

linux c文件属性,【linux c learn 之stat】获取文件的属性

NAMEstat 获取文件属性这个函数位于头文件里函数原型&#xff1a;int stat(const char *path, struct stat *buf);參数&#xff1a;path 文件路径文件名称buf 指向buffer的指针返回值&#xff1a;-1 遇到错误0 成功返回函数作用&#xff1a;把path文件的信息拷贝到指…

!function(){}()

http://my.oschina.net/u/2331760/blog/468672?p{{currentPage1}} ( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法&#xff0c;最初我以为是一个括号包裹匿名函数&#xff0c;再在后面加个括号调用函数&#xff0c;最后达到函数定义后立…

altium designer 10哪个作者写的好 。

问题截图&#xff1a; 博主解答&#xff1a; 其实这种书籍基本内容都差不多&#xff0c;很多都是作者来回借鉴&#xff0c;我们能根据自己的需要学到知识即可。

orm查询部分字段_ORM问题第2部分–查询

orm查询部分字段在我以前关于对象关系映射工具&#xff08;ORM&#xff09;的帖子中&#xff0c;我讨论了在处理当今常见的ORM&#xff08;包括Hibernate&#xff09;时遇到的各种问题。 其中包括与从POJO生成架构有关的问题&#xff0c;实际性能和不断出现的维护问题。 本质上…

新浪微博开发-添加子视图控制器设置颜色

一.添加子视图控制器 二.设置颜色 设置颜色&#xff1a;两种方法 一种较为繁琐&#xff0c;详见视频 第二种&#xff1a; //设置颜色 self.tabBar.tintColor UIColor.orangeColor()转载于:https://www.cnblogs.com/torrescx/p/5237142.html