2013-02-22 4 views
4

В чем разница между Enumerator и Iterator? По моему мнению Enumerator не является причудливым псевдонимом для enum в Java. Скорее, это похоже на метод обхода, аналогичный Iterator. Каждый может сравнить и сравнить Enumerator и Iterator? Кроме того, я вижу использование в Play какПеречислитель против Итератора в scala и java

val data = getDataStream 
val dataContent: Enumerator[Array[Byte]] = Enumerator.fromStream(data) 

EDIT:

Я склонен думать, что Enumerator дает нам реальные массивы данных, в то время как Iterator дает нам указатели на данные, которые уже Chunked, таких как список. Но я не уверен, что так.

+0

Я ищу 'Enumerator' в java, и все, что появляется, это' Enumeration' (чей javadoc четко заявляет, что он имеет те же функции 'Iteration'). Можно указать ссылку на javadoc? – SJuan76

+2

@foampile вы вводите в заблуждение ['Enumerator'] (http://www.playframework.com/documentation/2.0/Enumerators) с' Enumeration', которые представляют собой разные вещи. –

+1

'Enumeration' по существу не рекомендуется; «Итератор» - его замена. –

ответ

9

Enumerator - Play class, а не Java или Scala.

Это часть обработки ввода-вывода Iteratee, которую обеспечивает Play. Iteratees - интересный зверь - с одной стороны, он «толкает» данные обработчику, вместо того, чтобы полагаться на обработчика, чтобы извлекать данные, и, следовательно, имеет лучшую производительность. На руке другой он позволяет обработчику контролировать, когда поток должен быть остановлен. Наконец, можно составить итерации, чтобы разные итерации отвечали за разные части ввода (скажем, один, чтобы получать заголовки HTTP, другие для получения его тела), а также связывать их так, чтобы итерации на низком уровне могли выполнять предварительную обработку, которая затем подается на более высокий уровень итераций.

На них много материала, воспользуйтесь им.

Это не, связанный каким-либо образом с итераторами или перечислениями.

+0

На самом деле Java действительно использует Enumerator. Одно место, которое я могу вспомнить, можно увидеть в классе «Hashtable». – learner

+0

@ user1612593, но это не открытый API (класс полностью скрыт внутри Hashtable). –

+0

@ user1612593 Вы имеете в виду «Перечисление» (это более старая версия «Итератора»). – Javier

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

  • Нет связанных вопросов^_^