·>Тут надо закрывать писателя pipedHelper.close()
Так а что делать, если известен только InputStream?
Еще раз, есть вот такой объект:
// Сообщения специального формата. Парсятся из входного потока, ответы на них пишутся в выходной поток
class Message {
....
}
class Proxy {
public Proxy(InputStream in, OutputStream out, Consumer<Message> cons) {
....
}
public void stop() {
....
}
}
При создании объект Proxy внутри себя запускает вспомогательные потоки. В них он ждет данных из входного потока,
пишет данные в выходной поток, периодически вызывает пользовательский обработчик, аргумент которого — распарсенное сообщение.
Предполагается, что в реальной жизни потоки будут взяты с сокета, а в тестах — созданы руками.
Но сам класс не знает, где он запускается, и видит только InputStream и OutputStream.
В один прекрасный момент из главного потока (так проще, про вызов из обработчика я еще подумаю) вызывается Proxy.stop(),
который ждет, пока Proxy остановит все свои потоки и освободит все занятые ресурсы.
Как это сделать, если некоторые потоки заблокированы на чтении данных?
Я поначалу хотел просто закрыть входящий поток, но, похоже, этого недостаточно.