2014-12-19 6 views
4

У меня есть экземпляр ByteString. Чтобы прочитать данные из него, я должен использовать метод iterator().Как получить текущую позицию итератора в ByteString?

Я прочитал некоторые данные, а затем решил, что мне нужно создать представление (отдельный итератор некоторого фрагмента данных).

Я не могу использовать slice() оригинального итератора, потому что это делает его непригодным для использования, потому что документы говорит, что:

После вызова этого метода следует отказаться от итератора он был вызван на, и использование только итератор, который был возвращен. Использование старого итератора не определено, может быть изменено и может привести к изменению итератора на .

Таким образом, кажется, что мне нужно вызвать 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 

Update:

Пытался сделать это с duplicate():

ByteIterator iteratorForView = originalIterator.duplicate()._2.take(length); 

ответ

3

ByteIterator «s from поле является частным, и ни один из методов не кажется просто верните его. Все, что я могу предложить, это использовать originalIterator.duplicate, чтобы получить безопасную копию, или же «обмануть», используя отражение, чтобы прочитать поле from, предполагая, что отражение доступно в вашей среде развертывания.

+0

Но я не хочу копировать данные, чтобы получить простой просмотр только для чтения. Отражение происходит медленно. Может быть, мне удастся увидеть другой путь? – bobby

+1

Вы не копируете данные, просто итератор. – lmm

+0

Я обновил вопрос, не могли бы вы посмотреть, правильно ли это? – bobby

Смежные вопросы