2014-12-19 87 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