2013-01-21 5 views
0

У меня есть следующие проблемы:OutputStream и InputStream для между потоками связи

Я даюсь модулем со следующим API:

public void start(InputStream input, OutputStream output, 
     InputStream error, PipeListener<T> listener) 

Целью данного модуля является для облегчения связи между основнымами системных и внешних процессов (в данном случае экземпляров Процесса).

То, что я пытаюсь сделать, это реализовать «mock process», который фактически является экземпляром Thread, но имеет свои собственные потоки ввода, вывода и ошибок. Ключевым моментом здесь является природа потоков сами, к примеру, я хочу реализацию потока, возвращенное

((MockProcess)mockProcess).getInputStream() 

функционально идентичны

((Process)realProcess).getInputStream(). 

Для всех намерений и целей, они должны быть полностью взаимозаменяемы.

Какую реализацию InputStream и OutputStream (соответственно) следует использовать для достижения этой цели? Единственное предложение, которое я смог найти, это использовать потоки с каналами ... но действительно ли это лучший вариант?

+0

Это общий вопрос для тестирования интеграции. Некоторые поиски по этой теме могут помочь. –

ответ

-1

Я бы сказал, что они являются наилучшим вариантом, потому что трубы используются для межпроцессного взаимодействия в unix. Вы должны избегать любых форм ввода-вывода на дисках. И вам следует избегать всех тяжелых перегрузок tcp/ip. Так что трубы действительно лучший вариант.

+0

Он не говорил о трубах OS. Он имел в виду Java PipedInputStream, PipedOutputStream – mikeslattery

+0

Я знаю. Я просто сравнивал одну и ту же проблему с системами: как передавать потоки в java? как потоки обмениваются данными в ОС? Трубы - лучшие решения. Java-каналы имеют одинаковое преимущество: нет ввода-вывода на диске, не требуется tcp/ip, они блокируются после отправки слишком большого количества данных. Вероятно, самый важный фактор - это блок труб. Никакой другой поток ввода/вывода Java не блокируется одинаково. – eppesuig

Смежные вопросы