我有一个ByteString
的实例。要从中读取数据,我应该使用它的iterator()
方法。
我读了一些数据,然后我决定创建一个视图(一些数据块的独立迭代器)。
我不能使用原始迭代器的slice()
,因为这会使它无法使用,因为docs说:
在调用此方法之后,应该丢弃它被调用的迭代器,并仅使用返回的迭代器。用旧 迭代器未定义,可能会发生变化,并可能导致更改 也是新的迭代器。
所以,似乎我需要在slice()
上致电ByteString
。但是slice()
有from
和until
参数,我不知道from
。我需要这样的东西:
ByteString originalByteString = ...; // <-- This is my input data
ByteIterator originalIterator = originalByteString .iterator();
...
read some data from originalIterator
...
int length = 100; // < -- Size of the view
int from = originalIterator.currentPosition(); // <-- I need this
int until = from + length;
ByteString viewOfOriginalByteString = originalByteString.slice(from, until);
ByteIterator iteratorForView = viewOfOriginalByteString.iterator(); // <-- This is my goal
更新
尝试使用duplicate()
:
ByteIterator iteratorForView = originalIterator.duplicate()._2.take(length);
答案 0 :(得分:3)
ByteIterator
&#39; from
字段是私有的,并且没有一种方法似乎只是简单地返回它。我所能建议的是使用originalIterator.duplicate
来获取安全副本,或者使用#34;作弊&#34;通过使用反射来读取from
字段,假设您的部署环境中有反射。