java写入单个字符

这是创建超低延迟的Chronicle FIX-Engine时使用的另一个好技巧。

在从字节流中读取数据时,如果可能的话,将数据存储在char而不是将其读取到String效率更高。 (至少您要避免创建String对象,尽管可以通过使用缓存或使用CharSequence而不是String来缓解这种情况,但这是另一篇文章的主题。)

使用JMH基准测试,我发现了这些时间安排:(我没有包括源代码,因为这将是另一篇文章的主题,在此我将更详细地描述不同的方法论)。

从一个字节流中读取2个ascii字符到:

String - 34.48ns
Pooled String - 28.57ns
StringBuilder - 21.27ns
char (using 2 chars method) - 6.75ns

关键是,将数据读入String至少是char 3倍,而这甚至没有考虑创建的垃圾。

因此,不用说,当您知道期望的数据始终是单个字符时,应该将其读取为char ,而不是将其读取为String变量。

现在,如果您知道流中期望的数据不超过2个字符,该怎么办。 (例如在FIX 5.0标记35 msgType中找到这种情况)。 您是否必须使用字符串来容纳额外的字符? 乍一看似乎如此,毕竟一个char只能包含一个字符。

可以吗

一个Java char由2个字节组成,而不是一个字节。 因此,如果您知道您的数据是由ascii字符组成的,那么您将只使用一个字节( char中的2个字节)。 例如,“ A”是65,而“ z”是122。

您可以通过以下简单循环打印出适合单个字节的值:

for (int i = 0; i < 256; i++) {char c = (char)i;System.out.println(i+ ":" + c);
}

现在,您可以自由使用char的另一个字符来保留第二个ascii字符。

这是这样做的方法:

在此示例中,您已读取2个字节“ a”和“ b”,并希望将它们存储在单个char中。

byte a = (byte)'a';
byte b = (byte)'b';
//Now place a and b into a single char
char ab = (char)((a << 8) + b);//To retrieve the bytes individually see code below
System.out.println((char)(ab>>8) +""+ (char)(ab & 0xff));

为了更好地理解这一点,让我们看一下二进制文件:

byte a  = (byte)'a' // 01100001byte b  = (byte)'b' // 01100010As you can see below, when viewed as a char, the top 8 bits are not being usedchar ca = 'a' // 00000000 01100001char cb = 'b' // 00000000 01100010Combine the characters with a taking the top 8 bits and b the bottom 8 bits.char ab = (char)((a << 8) + b); // 01100001 01100010

摘要

将数据读入char而不是String效率更高。 如果您知道最多有2个ascii字符,则可以将它们组合成一个Java char。 当然,只有在您确实担心超低延迟的情况下才使用此技术!

翻译自: https://www.javacodegeeks.com/2016/01/writing-2-characters-single-java-char.html

java写入单个字符

java写入单个字符_将2个字符写入单个Java char相关推荐

  1. java ascii码转字符_一文让你读懂JAVA.IO、字符编码、

    1 JAVA.IO字节流 inputstream.png LineNumberInputStream和StringBufferInputStream官方建议不再使用,推荐使用LineNumberRea ...

  2. java双斜线转义_转义字符\(在hive+shell以及java中注意事项):正则表达式的转义字符为双斜线,split函数解析也是正则...

    转义字符将后边字符转义,使特殊功能字符作为普通字符处理,或者普通字符转化为特殊功能字符. 各个语言中都用应用,如java.python.sql.hive.shell等等. 如sql中 "\& ...

  3. java重要基础知识点_必看 | 新人必看的Java基础知识点大梳理

    原标题:必看 | 新人必看的Java基础知识点大梳理 各位正在认真苦学Java的准大神,在这烈日炎炎的夏季里,老九君准备给大家带来一个超级大的"冰镇西瓜,"给大家清凉一下,压压惊. ...

  4. 百度java的线程技术_自我提升(基础技术篇)——java线程简介

    前言:虽然自己平时都在用多线程,也能完成基本的工作需求,但总觉得,还是对线程没有一个系统的概念,所以,查阅了一些资料,理解那些大神和官方的资料,写这么一篇关于线程的文章 本来想废话一番,讲讲自己的经历 ...

  5. java的jmm模型_【深入理解JVM】:Java内存模型JMM

    多任务和高并发的内存交互 多任务和高并发是衡量一台计算机处理器的能力重要指标之一.一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标 ...

  6. java 补齐字符串_使用String.format()格式化字符串,java自动补全自增长字符串

    JDK1.5中,String类新增了一个很有用的静态方法String.format(): format(Locale l, String format, Object... args) 使用指定的语言 ...

  7. java io教学文件_通过代码实例跟我学Java语言程序设计及应用技术——Java文件IO技术及应用相关的教学示例(第3部分)...

    1.1Java文件IO技术及应用相关的教学示例(第3部分) 1.1.1文本字符流IO操作 1.字符流Reader/Writer类 提供的对字符流处理的类,它们为抽象类.其子类 (1)InputStre ...

  8. java职业发展路线图_从程序员到CTO的Java技术路线图 JAVA职业规划 JAVA职业发展路线图 系统后台框架图、前端工程师技能图 B2C电子商务基础系统架构解析...

    http://zz563143188.iteye.com/blog/1877266在技术方面无论我们怎么学习,总感觉需要提升自已不知道自己处于什么水平了.但如果有清晰的指示图供参考还是非常不错的,这样 ...

  9. java中验证码发送_实现短信验证码的发送[JAVA]

    如何实现短信验证码的发送 一.基础知识补充 1.编码 2.URL 3.字节流与字符流 二.短信验证码编程实现 一.基础知识补充 1.编码 常见的编码:UTF-8 GBK Unicode GB2312 ...

  10. Java中合法的关键词_优秀程序员必须掌握的java中50个关键字

    关键字和保留字的区别 正确识别java语言的关键字(keyword)和保留字(reserved word)是十分重要的.Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表 ...

最新文章

  1. DataInputStream与DataOutputStream类
  2. 单片机c语言正弦计算器,求一个 89C51 简易计算器的c语言程序 只要加减乘除就行!...
  3. java反射有什么用_java反射的作用知识点总结
  4. Google浏览器中的开发工具.
  5. jeeCMS首页加载流程
  6. linux crontab定时任务常用梳理
  7. Java千百问_04异常处理(007)_常见的java异常有哪些(非运行时)
  8. 晨哥真有料丨常见的话题终结者与破解方法
  9. java托盘图标变白在linux,升级Ubuntu后系统托盘图标消失
  10. poj1019(打表预处理+数学)
  11. linux每日命令(28):chgrp命令
  12. java redis实战
  13. aspose.words生成pdf字体乱码为方框
  14. 加快二代支付系统建设改进央行支付清算服务
  15. CSS在Mac /Win上兼容显示
  16. 图像的二维频谱图的理解 20170622
  17. Spring知识点讲解 【笔记】
  18. MAC 下 CocoaPods 安装与使用来管理项目第三方框架
  19. 经典问题 小白鼠试毒药 这个算法你绝对不知道
  20. python更改保存路径,Jupyter Notebook更改保存文件的默认路径(方法汇总,亲测有效)...

热门文章

  1. P7726-天体探测仪(Astral Detector)【构造】
  2. 【动态规划】加法最大 (ssl 1595)/乘积最大 (ssl 1007)
  3. [ZJOI2005]午餐(贪心+dp)
  4. 操作系统复习笔记 06 CPU Scheduling CPU调度
  5. Mybatis中强大的功能元素:resultMap
  6. JFreeChart(五)之XY图
  7. Java经典面试题一
  8. Java NIO系列教程(四) Scatter/Gather
  9. 子类可以继承到父类上的注解吗
  10. eclipse下载与安装步骤详解,包含解决错误(最全最详细,多图)