Возможно, вы захотите рассмотреть вопрос о создании подкласса NSInputStream и оборачивании исходного потока в ваш новый класс, который буферизует и / или изменяет байты по мере их прохождения.
Основная причина, которую я нашел для этого через границыПодход сокетов заключается в поддержке поиска.Файловые NSInputStreams используют свойство потока для поиска в файле, и я не мог легко организовать это без подклассов.
Проблема с этим подходом состоит в том, что кажется, что бесплатное мостовое соединение не будет работать для вашего подкласса- но есть очень хорошая статья, которая также даст вам подкласс шаблона, с которого нужно начинать:
http://bjhomer.blogspot.co.uk/2011/04/subclassing-nsinputstream.html
Я получил решение для буферизации, работающее с использованием обоих подходов - хотяЕще одна проблема, связанная с подходом подкласса, заключается в том, что вам нужно позаботиться о том, чтобы отправлять события слушателям соответствующим образом - например, когда ваш исходный поток отправляет вам событие EOF, вы не будете передавать его своему потребителю, пока он не освободитбуфер - так что там есть некоторые проблемы.
Кроме того, вам может потребоваться убедиться, что клиенты выполняют чтение из основного цикла выполнения (я понял, что это работает с большой центральной диспетчеризацией), - потому что любой наблюдает за вамиdo в вашем подклассе - в исходном потоке - конфликтует с потребителем в противном случае.Хотя вы, похоже, можете выбрать любой цикл выполнения для наблюдения за потоками, работает только основной.
Таким образом, в целом я бы сказал, что нужно использовать парные потоки, если вам не нужна поддержка поиска - или если вы не совсем увереныв метод парных потоков.