将ByteBuffer流转换为Rx中的行的有效方法

时间:2015-04-22 16:59:03

标签: java nio reactive-programming rx-java

我希望通过按行结束字符拆分将Observable<ByteBuffer>转换为行(Observable<String>)。如果我们有toStringconcatsplitByLine等功能,我们必须能够执行以下操作:

Observable<ByteBuffer> o = ...;
o.map(toString).reduce(concat).flatMap(splitByLine);

然而,该算法需要先扫描整个字节,然后在实际发出第一行反序列化字符串之前将它们存储在内存中。每次行结尾以增量方式出现在字节中时如何发出新行?

1 个答案:

答案 0 :(得分:1)

我终于找到了rxjava-string。它为我们提供了 Rx运算符来处理 chunked 字节数组和字符串流。找到API文档here

问题可以通过以下方式实现:

Observable<byte[]> o = ...;
Charset charset = Charset.forName("UTF-8");
// StringObservable have no operators for ByteBuffer yet
StringObservable.byLine(StringObservable.decode(o, charset));