2013-04-22 2 views
0

В принципе, я пытаюсь автоматизировать нажатия клавиш, переключая существующий BufferedInputStream (System.in) на собственный буферный входной поток. Я хотел бы создать объект BufferedInputStream(), который присоединяется к чему-то вроде строки, которая может управляться асинхронно.Как подключить буферизованный входной поток к строке?

Вот что я хотел бы сделать ..

StringBuilder stringBuilder=new StringBuilder; 
BufferedInputStream output=new something(new something(stringBuilder)); 

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

Я не уверен, как это сделать, но мне нужно написать что-то, что может заменить System.in inpustream.

+1

Ваш вопрос очень неясен. Вы хотите написать «output» или прочитать из него? –

+0

Я не совсем понимаю, что вы пытаетесь сделать. Вы хотите написать StringBuilder, а затем прочитать то, что вы написали из InputStream? – creechy

+0

В принципе, у меня есть большая программа, в которой мне иногда нужно быть частью более крупной программы. Итак, я hjacking stdin и stdout из оригинальной программы и перенаправляюсь в читателей/писателей :) Ответ ниже, спасибо за чтение. – AdamOutler

ответ

0

Я поставил хорошие твердые 10 часов в это ... вот что я придумал .. Piped Streams то, что мне нужно

int BUFFER = 4096; 
    PipedOutputStream toAppPipedOutputStream; 
    PipedInputStream toAppPipedInputStream; 

    static BufferedReader fromAppBufferedReaderfinal; 
    BufferedOutputStream fromAppOutputStream; 
    PipedOutputStream fromAppPipedOutputStream; 
    PipedInputStream fromAppPipedInputStream; 

    /* constructor sets up logging and parameters */ 

      try { 
       fromAppPipedInputStream = new PipedInputStream(BUFFER); 
       fromAppOutputStream=new BufferedOutputStream(new PipedOutputStream(fromAppPipedInputStream)); 
       fromAppBufferedReaderfinal=new BufferedReader(new InputStreamReader(fromAppPipedInputStream)); 
       CASUAL.Log.out = new PrintStream(fromAppOutputStream); 

       toAppPipedInputStream = new PipedInputStream(BUFFER); 
       toAppPipedOutputStream=new PipedOutputStream(toAppPipedInputStream); 
       CASUAL.CASUALInteraction.in= new BufferedReader(new InputStreamReader(toAppPipedInputStream)); 

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

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