importorg.apache.commons.net.io.Util;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;/*** This is a utility class providing a reader/writer capability required
* by the weatherTelnet, rexec, rshell, and rlogin example programs.
* The only point of the class is to hold the static method readWrite
* which spawns a reader thread and a writer thread. The reader thread
* reads from a local input source (presumably stdin) and writes the
* data to a remote output destination. The writer thread reads from
* a remote input source and writes to a local output destination.
* The threads terminate when the remote input source closes.
* **/
public final classIOUtil {public static final void readWrite(finalInputStream remoteInput,finalOutputStream remoteOutput,finalInputStream localInput,finalOutputStream localOutput) {
Thread reader, writer;
reader= newThread() {
@Overridepublic voidrun() {intch;try{while (!interrupted() && (ch = localInput.read()) != -1) {
remoteOutput.write(ch);
remoteOutput.flush();
}
}catch(IOException e) {
e.printStackTrace();
}
}
};
writer= newThread() {
@Overridepublic voidrun() {try{
Util.copyStream(remoteInput, localOutput);
}catch(IOException e) {
e.printStackTrace();
System.exit(1);
}
}
};
writer.setPriority(Thread.currentThread().getPriority()+ 1);
writer.start();
reader.setDaemon(true);
reader.start();try{
writer.join();
reader.interrupt();
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}