У меня есть экземпляр 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);
Но я не хочу копировать данные, чтобы получить простой просмотр только для чтения. Отражение происходит медленно. Может быть, мне удастся увидеть другой путь? – bobby
Вы не копируете данные, просто итератор. – lmm
Я обновил вопрос, не могли бы вы посмотреть, правильно ли это? – bobby