Перечислитель против Итератора в Scala и Java
В чем разница между перечислителем и итератором? В моем понимании Enumerator
это не причудливый псевдоним для enum
на Яве. Скорее, это похоже на метод обхода, похожий на Iterator
, Так что каждый может сравнить и противопоставить Enumerator
а также Iterator
? Кроме того, я вижу использование в Play
как
val data = getDataStream
val dataContent: Enumerator[Array[Byte]] = Enumerator.fromStream(data)
РЕДАКТИРОВАТЬ:
Я склонен думать, что Enumerator
дает нам фактические порции данных, тогда как Iterator
дает нам указатели на данные, которые уже разбиты на части, такие как список. Но я не уверен, что это так.
1 ответ
Enumerator
класс Play, а не класс Java или Scala.
Это частьIteratee
Обработка ввода / вывода, которую обеспечивает Play. Итерации - интересный зверь - с одной стороны, он "выталкивает" данные в обработчик, вместо того чтобы полагаться на обработчик для извлечения данных, и, следовательно, имеет лучшую производительность. С другой стороны, это позволяет обработчику контролировать, когда поток должен быть остановлен. Наконец, можно составить итераторов, чтобы разные итераторы отвечали за разные части ввода (скажем, один для получения заголовков HTTP, другой для получения его тела), а также связывать их так, чтобы итераторы низкого уровня могли выполнять предварительную обработку, которая затем подается к итераторам более высокого уровня.
На них много материала, воспользуйтесь им.
Это никак не связано с итераторами или перечислениями.