2014-12-19 43 views
4

我有一个ByteString的实例。要从中读取数据,我应该使用它的iterator()方法。如何获取ByteString中迭代器的当前位置?

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

我不能用原来的迭代器的slice(),因为这将使其无法使用,因为文档说:

调用此方法后,应该丢弃,它被称为在迭代器,并使用只有返回的迭代器。使用旧的 迭代器是未定义的,可能会更改,并且可能导致新迭代器的更改为 。

所以,看来我需要调用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); 

回答

3

ByteIteratorfrom字段是私有的,没有任何的方法似乎只需返回它。我所能建议的只是使用originalIterator.duplicate来获取安全副本,或者假设反射在您的部署环境中可用,则通过使用反射来读取from字段来“作弊”。

+0

但我不想复制数据以获得简单的只读视图。反思很慢。也许我能以另一种方式看待? – bobby 2014-12-19 10:53:59

+1

你不复制数据,只是迭代器。 – lmm 2014-12-19 10:55:20

+0

我更新了这个问题,你可以看看这是否正确? – bobby 2014-12-19 11:05:18