Immutable消息
Actor之间是通过消息沟通的,但为了避免同步问题,消息必须是Immutable。因此,Akka无法使用byte[]或ByteBuffer,而是设计了ByteString来表示二进制数据。理解这一点很重要,因为ByteString是不可变的,所以ByteString的很多看似修改状态的方法实际上都是返回一个新的ByteString实例。如果对String或BigInteger等Java自带的不可变类比较了解,那么就很容易理解这一点。
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来使用。
相关推荐
赠送jar包:akka-actor_2.11-2.5.19.jar; 赠送原API文档:akka-actor_2.11-2.5.19-javadoc.jar; 赠送源代码:akka-actor_2.11-2.5.19-sources.jar; 赠送Maven依赖信息文件:akka-actor_2.11-2.5.19.pom; 包含...
赠送jar包:akka-slf4j_2.11-2.5.21.jar; 赠送原API文档:akka-slf4j_2.11-2.5.21-javadoc.jar; 赠送源代码:akka-slf4j_2.11-2.5.21-sources.jar; 赠送Maven依赖信息文件:akka-slf4j_2.11-2.5.21.pom; 包含...
基于scala 、akka实现了一个简单的报表工具。该项目是个玩具项目,用于个人学习scala和akka。使用scala语言开发,基于akka-http, akka-stream,akka-cluster等新...流控 Back-Pressure, 避免OutOfMemory(akka-stream).
赠送jar包:akka-stream_2.11-2.5.21.jar; 赠送原API文档:akka-stream_2.11-2.5.21-javadoc.jar; 赠送源代码:akka-stream_2.11-2.5.21-sources.jar; 赠送Maven依赖信息文件:akka-stream_2.11-2.5.21.pom; ...
akka-kryo-serialization, 基于Kryo的Akka序列化 akka-kryo-serialization-- Scala 和Akka基于kryo的序列化程序这个库为 Scala 和Akka提供定制的基于kryo的序列化程序。 它可以用于更高效的akka远程处理。它还可以...
akka-actor_2.11 jar包
《Akka Actor库详解——基于akka-actor-1.0-RC2.jar.zip的剖析》 Akka是一个由Lightbend公司维护的开源框架,主要用于构建高度并发、分布式和反应式的应用程序。在Java和Scala平台上,Akka因其强大的性能和易用性而...
akka-persistence-sql-async, 一个用于akka持久性的日志和快照存储 akka-persistence-sql-async 的日志和快照存储插件( akka持久化插件。 Akka-persistence-sql-async执行由 scalikejdbc异步查询,它提供非阻塞api来...
赠送jar包:akka-actor_2.11-2.5.21.jar; 赠送原API文档:akka-actor_2.11-2.5.21-javadoc.jar; 赠送源代码:akka-actor_2.11-2.5.21-sources.jar; 赠送Maven依赖信息文件:akka-actor_2.11-2.5.21.pom; 包含...
赠送jar包:akka-stream_2.11-2.5.21.jar; 赠送原API文档:akka-stream_2.11-2.5.21-javadoc.jar; 赠送源代码:akka-stream_2.11-2.5.21-sources.jar; 赠送Maven依赖信息文件:akka-stream_2.11-2.5.21.pom; ...
赠送jar包:akka-actor_2.11-2.4.20.jar; 赠送原API文档:akka-actor_2.11-2.4.20-javadoc.jar; 赠送源代码:akka-actor_2.11-2.4.20-sources.jar; 赠送Maven依赖信息文件:akka-actor_2.11-2.4.20.pom; 包含...
赠送jar包:akka-protobuf_2.11-2.4.20.jar; 赠送原API文档:akka-protobuf_2.11-2.4.20-javadoc.jar; 赠送源代码:akka-protobuf_2.11-2.4.20-sources.jar; 赠送Maven依赖信息文件:akka-protobuf_2.11-2.4.20....
赠送jar包:akka-actor_2.11-2.5.19.jar; 赠送原API文档:akka-actor_2.11-2.5.19-javadoc.jar; 赠送源代码:akka-actor_2.11-2.5.19-sources.jar; 赠送Maven依赖信息文件:akka-actor_2.11-2.5.19.pom; 包含...
在"akka-http-1.0-RC2.jar.zip"这个压缩包中,包含的核心文件"akka-http-1.0-RC2.jar"是Akka HTTP库的实现。开发者在项目中引用这个JAR文件,就可以利用Akka HTTP的功能,构建自己的HTTP服务器或者客户端。 使用...
akka-actor_2.12 jar包
赠送jar包:akka-actor_2.11-2.4.20.jar; 赠送原API文档:akka-actor_2.11-2.4.20-javadoc.jar; 赠送源代码:akka-actor_2.11-2.4.20-sources.jar; 赠送Maven依赖信息文件:akka-actor_2.11-2.4.20.pom; 包含...
赠送jar包:akka-protobuf_2.11-2.4.20.jar; 赠送原API文档:akka-protobuf_2.11-2.4.20-javadoc.jar; 赠送源代码:akka-protobuf_2.11-2.4.20-sources.jar; 赠送Maven依赖信息文件:akka-protobuf_2.11-2.4.20....
赠送jar包:akka-stream_2.11-2.4.20.jar; 赠送原API文档:akka-stream_2.11-2.4.20-javadoc.jar; 赠送源代码:akka-stream_2.11-2.4.20-sources.jar; 赠送Maven依赖信息文件:akka-stream_2.11-2.4.20.pom; ...
赠送jar包:akka-stream_2.11-2.4.20.jar; 赠送原API文档:akka-stream_2.11-2.4.20-javadoc.jar; 赠送源代码:akka-stream_2.11-2.4.20-sources.jar; 赠送Maven依赖信息文件:akka-stream_2.11-2.4.20.pom; ...
赠送jar包:akka-actor_2.11-2.5.21.jar; 赠送原API文档:akka-actor_2.11-2.5.21-javadoc.jar; 赠送源代码:akka-actor_2.11-2.5.21-sources.jar; 赠送Maven依赖信息文件:akka-actor_2.11-2.5.21.pom; 包含...