将数据输入InputStream

时间:2014-08-12 21:13:37

标签: java io jsch

我知道InputStream用于阅读,OutputStream用于写入...但是如果我有一个应用程序将所有数据从InputStream传递到远程端并将所有收到的数据从该远程端推送到OutputStream,我需要将动态数据发送到该远程端...如何将其输入到InputStream中?我可以在Java控制台中轻松完成此操作,因为输入的任何内容都放入System.in并发送到该远程端,所有返回的内容都通过System.out处理,但显然我无法使用Java控制台生产。我将如何模拟此功能,例如创建一个发送“命令X \ r”的按钮,好像它被输入到java控制台一样?

注意:对于后台,我使用JSch SSH连接到Cisco ASA。我已将Channel.setInputStream(System.in)Channel.setOutputStream(System.out)设置为通过控制台成功通信。

1 个答案:

答案 0 :(得分:1)

我不熟悉JSch,我怀疑你有这种反向。首先,根据他们的example,您实际应该使用Channel.setCommand()执行命令。然后,您可以使用Channel.getInputStream()获取可以从读取远程响应的流。

除此之外,粗略地看一眼the documentation似乎暗示你应该使用频道的现有流并从中读取/写入,例如:

OutputStream out = Channel.getOutputStream();

String str = "command X\r";
out.write(str.getBytes("us-ascii"));

这会更有意义,更容易处理。

但是,关于InputStream的一般问题:您可以使用任何InputStream作为数据来源。恰好,System.in是来自标准输入(实际上是文件)的那个。

如果您想使用即时构建的数据,可以使用ByteArrayInputStream,例如:

String str = "command X\r";
InputStream in = new ByteArrayInputStream(str.getBytes("us-ascii"));

// do stuff with in

如果 us-ascii 不合适,您可以使用任何所需的字符编码。

但是,我再次怀疑你是在稍微向后做这件事。