Akka边学边写(3)-- ByteString介绍
Akka的IO层设计能够參考这篇文档,本文简介一下ByteString的设计。
Immutable消息
Actor之间是通过消息沟通的。但为了避免同步问题,消息必须是Immutable。
因此。Akka无法使用byte[]或ByteBuffer。而是设计了ByteString来表示二进制数据。理解这一点非常重要,由于ByteString是不可变的。所以ByteString的非常多看似改动状态的方法实际上都是返回一个新的ByteString实例。
假设对String或BigInteger等Java自带的不可变类比較了解。那么就非常easy理解这一点。
Rope数据结构
ByteString是一种类似Rope的数据结构,例如以下图所看到的:
尽管在内部ByteString使用树形结构存储了n个小byte[],但从外部来看。ByteString仍然像是一个大的byte[]。
工厂方法
ByteString是抽象类。不能直接实例化。能够使用工厂方法来创建ByteString实例,ByteString提供了6个工厂方法,例如以下所看到的:
public static ByteString empty()
public static ByteString fromArray(byte[] array)
public static ByteString fromArray(byte[] array, int offset, int length)
public static ByteString fromString(String string)
public static ByteString fromString(String string, String charset)
public static ByteString fromByteBuffer(ByteBuffer buffer)
empty()方法返回一个空的ByteString,其余方法能够依据byte[]。String或者ByteBuffer来创建ByteString实例。须要注意的是,为了保证状态不可改变,工厂方法可能会对数据进行拷贝。
经常用法
以下是比較经常使用的一些ByteString方法(我用String的类似方法给出解释):
- public int size() // string.length()
- public ByteString concat(ByteString bs) // string.concat(str)
- public byte head() // string.charAt(0)
- public ByteString tail() // string.substring(1, string.length())
- public ByteString take(int n) // string.substring(0, n)
- public ByteString drop(int n) // string.substring(n, string.length())
- public ByteString slice(int from, int until) // string.substring(from, until)
ByteStringBuilder
大家都知道,在生成一个长字符串的时候。应该用StringBuilder类(或其线程安全版本号StringBuffer)。出于相同的目的,Akka提供了ByteStringBuilder来创建ByteString。以下是ByteStringBuilder的使用方法演示样例:
ByteStringBuilder bsb = new ByteStringBuilder();
bsb.append(ByteString.fromString("abc"));
bsb.putByte((byte) 1);
bsb.putInt(32, ByteOrder.BIG_ENDIAN);
bsb.putDouble(3.14, ByteOrder.BIG_ENDIAN);
bsb.putBytes(new byte[] {1, 2, 3});
ByteString bs = bsb.result();
ByteIterator
为了方便的訪问ByteString里的数据,Akka提供了ByteIterator类。
能够通过ByteString的iterator()方法获得一份ByteIterator实例,以下是ByteIterator的使用方法演示样例:
ByteIterator it = bs.iterator();
it.getByte();
it.getInt(ByteOrder.BIG_ENDIAN);
it.getDouble(ByteOrder.BIG_ENDIAN);
it.getBytes(new byte[10]);
与java.io互操作
调用ByteStringBuilder的asOutputStream()方法。能够把ByteStringBuilder当成OutputStream来使用。调用ByteIterator的asInputStream()方法。能够把ByteIterator当做InputStream来使用。
结论
ByteString从Immutable的角度来讲,和String非常相似(我猜这也是为什么起名为ByteString的原因)。
使用ByteString的时候,应该牢记这点。
转载于:https://www.cnblogs.com/zfyouxi/p/5057909.html
Akka边学边写(3)-- ByteString介绍相关推荐
- 合工大计算机考研导师,合肥工业大学计算机与信息学院导师介绍:胡东辉
合肥工业大学计算机与信息学院导师介绍:胡东辉 2012-07-21 姓名:胡东辉 性别:男 出生年月:1973/12 职称:副教授 学院:计算机与信息学院 研究方向: 目前研究方向有隐写分析.数字图像 ...
- 《花雕学AI》01:尝试使用新必应制作《雕爷学编程》的栏目介绍
跨年头尾三个月,花雕走完塔克拉玛干沙漠回来后,突然发现世界变了,微软投资的ChatGPT火起来了,特别是升级的ChatGPT4.0,更是异常火热!这一个多月来,人工智能AI突然爆发,能做的事情太多了, ...
- 江西财经计算机应用杨教授,江西财经大学信息管理学院研究生导师介绍:刘德喜...
院校研究生导师对于日后的研究生生涯起到重要的指导作用,因此对目标院校研究生导师一定要了解.以下是中公考研小编为大家整理的"江西财经大学信息管理学院研究生导师介绍:刘德喜"的相关内容 ...
- 计算机课Word自我介绍,第5课 用WORD写篇自我介绍.doc
信息技术教学设计 <用WORD写篇自我介绍>Page: 1 在此课是否与后2课(共3课)合并综合为宜?请大家提意见.我个人现在的看法是,文件操作中的保存与打开越早讲越好.而全角/半角.对单 ...
- 介绍计算机的英语作文,总算晓得写一篇介绍电脑的英语作文
电脑的使用变得越来越普及,我们要正确使用电脑.在英语中也有关于介绍电脑的作文题材,那你想知道写一篇介绍电脑的英语作文怎么写吗?下面小编告诉你如何写一篇介绍电脑的英语作文,大家一起来看看吧! 写一篇介绍 ...
- 华北电力大学计算机科学,华北电力大学计算机科学与技术系介绍
华北电力大学计算机科学与技术系介绍 2010-07-15 计算机科学与技术系 院系简介 华北电力大学计算机专业始建于1977年.1983年开始培养硕士研究生.1997年取得计算机应用技术专业的硕士点. ...
- 学语言·写博客·分享交流——《我是一只IT小小鸟》读书笔
学语言·写博客·分享交流 --<我是一只IT小小鸟>读书笔记(8) 原贴地址:http://byourselves.ycool.com/post.2507061.html 刘未鹏的故事现在 ...
- 学计算机还要写作文吗,学电脑写作文
学电脑写作文以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 1. <我会玩电脑>作文400字 我会游泳,会骑 ...
- 合肥工业大学计算机与信息学院导师介绍,合肥工业大学计算机与信息学院导师介绍:周清峰...
教师信息 姓名 周清峰 性别 男 出生年月 1978,08 最终学位 博士 毕业学校 香港理工大学 (The Hong Kong Polytechnic University) 从事专业 通信与信息系 ...
最新文章
- 右键点“工作空间”窗口内空白部分,在弹出的菜单上勾选“Docking View / 停靠式”。然后双击程序窗口的窗棱,就是最上面那条蓝色边框
- Redis数据结构:字典(hash表)
- FIELD SYMBOL和TYPE REF TO的用法和比较
- 华为P50相机新升级:或首发索尼最大底手机CMOS
- Mybatis非mapper代理配置
- mysql半同步模式_MySQL 半同步复制模式的实现
- Linux基础—4.Linux系统管理命令【由图有真相】
- Java之Maven配置教程
- opencv摄像头常用操作
- Java使用DFA算法处理敏感词汇
- NOI Linux 2.0 桌面背景展示
- php通过JODConverter将word转换为pdf
- vscode关闭讨厌的单词拼写检查
- C#——lambda表达式和反射
- ElasticSearch数据库(ES数据库)简介
- java怎么把数据返回给客户端_java 服务器怎样给客户端传输数据
- 感谢国内知名 Android 开发者 「stormzhang」推荐了我的公众号
- 算算我们80后的小孩今后读大学要花多少钱
- Stagefright框架解读(—)音视频Playback流程
- 怎么成为高新技术企业?好处有哪些?