[英]InputStream from file, OutputStream to a file
我在主类中有以下代码:
IOUtil.readWrite(telnet.getInputStream(), telnet.getOutputStream(),
System.in, System.out);
这非常有效,因为System.in从用户那里获取输入,而System.out将打印所有输出。
我正在尝试更改此设置,因此,代替System.in的可能是另一个InputStream对象,该对象每次请求输入都从文件读取一行,并且System.out可能是一个将所有输出写入文件的Object。
IOUtil类如下:
package examples;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.net.io.Util;
public final class IOUtil
{
public final static void readWrite(final InputStream remoteInput,
final OutputStream remoteOutput,
final InputStream localInput,
final OutputStream localOutput)
{
Thread reader, writer;
reader = new Thread()
{
public void run()
{
int ch;
try
{
while (!interrupted() && (ch = localInput.read()) != -1)
{
remoteOutput.write(ch);
remoteOutput.flush();
}
}
catch (IOException e)
{
//e.printStackTrace();
}
}
}
;
writer = new Thread()
{
public void run()
{
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)
{
}
}
要替换System.out,只需使用FileOutputStream
。
要替换System.in,可以使用FileInputStream
。 这不会一次提供一行输入,但是我希望远程telnet服务器可以处理预先输入,所以这无关紧要。
如果预先输入确实很重要,那么您将遇到一个难题。 telnet客户端的输入端必须与输出端同步,并等待直到远程服务器/ shell期望下一行后再发送。
IOUtil.readWrite
方法(如所写)不会执行该操作。 我对telnet协议进行了简要介绍,但看不到任何内容表明客户端必须一次发送数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.