Что такое поток?

nlaq указывает, что instanceof может использоваться, чтобы протестировать, если объект является экземпляром класса, который реализует интерфейс.

, Но instanceof не различает тип класса и интерфейс. Вы не знаете, ли объект класс , который, оказывается, называют IInterface.

можно также использовать API Reflection в PHP для тестирования этого более конкретно:

$class = new ReflectionClass('TheClass');
if ($class->implementsInterface('IInterface'))
{
  print "Yep!\n";
}

См. http://php.net/manual/en/book.reflection.php

114
задан nbro 25 December 2017 в 16:17
поделиться

3 ответа

Поток представляет собой последовательность объектов (обычно байтов, но не обязательно), к которым можно получить доступ в последовательном порядке. Типичные операции с потоком:

  • чтение одного байта. В следующий раз, когда вы будете читать, вы получите следующий байт и т. Д.
  • прочтите несколько байтов из потока в массив
  • seek (переместите вашу текущую позицию в потоке, чтобы при следующем чтении вы получили байтов из новой позиции)
  • записать один байт
  • записать несколько байтов из массива в поток
  • пропустить байты из потока (это похоже на чтение, но вы игнорируете данные. Или, если хотите, это похоже на искать, но может идти только вперед.)
  • возвращает байты во входной поток (это похоже на «отменить» для чтения - вы вставляете несколько байтов обратно вверх по потоку, так что в следующий раз, когда вы будете читать, вы увидите именно это . Это' s иногда полезен для синтаксических анализаторов, например:
  • peek (смотрите байты, не читая их, чтобы они все еще были в потоке для последующего чтения)

Конкретный поток может поддерживать чтение (в этом случае он является «входным потоком»), записью («выходной поток») или обоими. Не все потоки доступны для поиска.

Возврат выполняется довольно редко, но вы всегда можете добавить его в поток, заключив реальный входной поток в другой входной поток, содержащий внутренний буфер. Чтения происходят из буфера, и если вы вернетесь, данные будут помещены в буфер. Если в буфере ничего нет, то поток обратной передачи читает из реального потока. Это простой пример «адаптера потока»: он находится на «конце» входного потока, это сам входной поток, и он делает что-то дополнительное, чего не делал исходный поток.

Поток - полезная абстракция, потому что он может описывать файлы (которые на самом деле являются массивами, следовательно, поиск прост), а также терминальный ввод / вывод (который недоступен для поиска, если не буферизован ), сокеты, последовательные порты и т. д. Таким образом, вы можете написать код, который говорит либо «Мне нужны некоторые данные, и мне все равно, откуда они и как они попали сюда», либо «Я произведу некоторые данные и что с ним произойдет, полностью зависит от моего абонента ". Первый принимает параметр входного потока, второй - параметр выходного потока.

Лучшая аналогия, которую я могу придумать, - это то, что поток - это конвейерная лента, идущая к вам или ведущая от вас (а иногда и то и другое). Вы берете материал из входного потока, вы помещаете материал в выходной поток. Некоторые конвейеры, которые можно представить себе как выходящие из дыры в стене, недоступны для поиска, чтение или письмо - это одноразовая сделка. Некоторые конвейеры проложены перед вами, и вы можете двигаться дальше, выбирая местоположение в потоке, который вы хотите читать / писать - это и есть поиск.

Однако, как говорит IRBMe, лучше думать о потоке с точки зрения операции, которые он предлагает (которые различаются от реализации к реализации, но имеют много общего), а не по физической аналогии. Потоки - это «вещи, которые вы можете читать или писать». Когда вы начинаете подключать адаптеры восходящего потока, вы можете думать о них как о блоке с конвейером на входе и конвейером на выходе, который вы подключаете к другим потокам, а затем ящик выполняет некоторые преобразования данных (их архивирование или изменение каналов строки UNIX. в DOS или что-то еще). Каналы - еще одна тщательная проверка метафоры: здесь вы создаете пару потоков, так что все, что вы пишете в один, можно прочитать из другого. Подумайте о червоточинах: -)

143
ответ дан 24 November 2019 в 02:33
поделиться

В дополнение к вещам, упомянутым выше, существует другой вид потоков - как определено в языках функционального программирования, таких как Scheme или Haskell - возможно, бесконечная структура данных, которая генерируется некоторой функцией по запросу.

6
ответ дан 24 November 2019 в 02:33
поделиться

Поток - это уже метафора, аналогия, так что нет необходимости приводить еще одну. Вы можете думать об этом в основном как о трубе с потоком воды в ней, где вода на самом деле является данными, а труба - потоком. Я полагаю, это своего рода двухсторонняя труба, если поток двунаправленный. По сути, это обычная абстракция, которая применяется к вещам, где есть поток или последовательность данных в одном или обоих направлениях.

В таких языках, как C #, VB.Net, C ++, Java и т. Д., Метафора потока используется для много вещей. Существуют файловые потоки, в которых вы открываете файл и можете читать из потока или записывать в него непрерывно; Существуют сетевые потоки, в которых чтение и запись в поток считываются и записываются в базовое установленное сетевое соединение. В текстовых потоках я найду кодировку символов, о которой вам следует знать.

Некоторые потоки также поддерживают произвольный доступ, как в этом примере. Сетевой поток, с другой стороны, по очевидным причинам не будет.

UNIX-подобные операционные системы также поддерживают модель потока с программным вводом и выводом, как описано здесь .

Некоторые потоки также поддерживают произвольный доступ, как в в этом примере. Сетевой поток, с другой стороны, по очевидным причинам не будет.

UNIX-подобные операционные системы также поддерживают потоковую модель с программным вводом и выводом, как описано здесь .

Некоторые потоки также поддерживают произвольный доступ, как в этом примере. Сетевой поток, с другой стороны, по очевидным причинам не будет.

UNIX-подобные операционные системы также поддерживают потоковую модель с программным вводом и выводом, как описано здесь .

65
ответ дан 24 November 2019 в 02:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: