PipedInputStream
и PipedOutputStream
используются для передачи данных между потоками.«Данные считываются из объекта PipedInputStream
одним потоком, а данные записываются в соответствующий PipedOutputStream
другим потоком».
Пока все хорошо.Одна потенциальная выгода, которую я вижу из этой парадигмы, состоит в том, что спорадический производитель (OutputStream
) не должен быть замедлен медленным потребителем (InputStream
).Другими словами, во времена, когда OutputStream
внезапно выдает большое количество данных, которые потребитель не может использовать сразу, OutputStream
не нужно ждать, пока произведенные данные будут полностью использованы, прежде чем продолжить работу сего жизнь.
Вопрос 1: Правильно ли мое понимание?Является ли это одним из преимуществ этой конструкции PipedStreams?
Если ответ на вопрос 1 положительный, тогда:
Это хорошо работает, когда буфер не заполнен, но когда буфер заполненв реализации JDK6 PipedOutputStream блокирует и ожидает освобождения большего пространства.Это превосходит цель, о которой я говорил выше, не так ли?
Кажется, что эту проблему очень легко решить, изменив поведение в случаях полного буфера от ожидания нового места до выделения большего буфера.Возможно, я смогу реализовать его за пару минут, но я бы не хотел изобретать велосипед, если что-то подобное уже доступно.Я немного погуглил, но не смог найти ничего, что меня удивило.
Может ли кто-нибудь указать мне правильное направление?Или укажите, где я ошибаюсь в своих мыслях?
Спасибо