我知道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)
设置为通过控制台成功通信。
答案 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 不合适,您可以使用任何所需的字符编码。
但是,我再次怀疑你是在稍微向后做这件事。