如何在ByteString中获取迭代器的当前位置?

时间:2014-12-19 08:35:17

标签: scala

我有一个ByteString的实例。要从中读取数据,我应该使用它的iterator()方法。

我读了一些数据,然后我决定创建一个视图(一些数据块的独立迭代器)。

我不能使用原始迭代器的slice(),因为这会使它无法使用,因为docs说:

  

在调用此方法之后,应该丢弃它被调用的迭代器,并仅使用返回的迭代器。用旧   迭代器未定义,可能会发生变化,并可能导致更改   也是新的迭代器。

所以,似乎我需要在slice()上致电ByteString。但是slice()fromuntil参数,我不知道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);

1 个答案:

答案 0 :(得分:3)

ByteIterator&#39; from字段是私有的,并且没有一种方法似乎只是简单地返回它。我所能建议的是使用originalIterator.duplicate来获取安全副本,或者使用#34;作弊&#34;通过使用反射来读取from字段,假设您的部署环境中有反射。