我希望通过按行结束字符拆分将Observable<ByteBuffer>
转换为行(Observable<String>
)。如果我们有toString
,concat
和splitByLine
等功能,我们必须能够执行以下操作:
Observable<ByteBuffer> o = ...;
o.map(toString).reduce(concat).flatMap(splitByLine);
然而,该算法需要先扫描整个字节,然后在实际发出第一行反序列化字符串之前将它们存储在内存中。每次行结尾以增量方式出现在字节中时如何发出新行?
答案 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));