【发布时间】:2020-01-26 02:05:09
【问题描述】:
所以我开始考虑这将是一个简单的 1 或 2 行代码,以便我将 OutputStream 转换为字符串,以便我可以用我的逻辑更好地检查它。
所以下面的代码是我目前正在使用的。如果我只想将 output 写入 console,它工作得很好,仅此而已。但是,我想将该 output 存储为 string。
public static void main(String[] args) throws IOException {
Process p;
try {
p = Runtime.getRuntime().exec("cmd");
new Thread(new SyncPipe(p.getErrorStream(), System.err)).start();
new Thread(new SyncPipe(p.getInputStream(), System.out)).start();
PrintWriter stdin = new PrintWriter(p.getOutputStream());
stdin.println("cd C:/Local Apps/xxx/xxx/xxxx/eclipse");
stdin.println("lscm login -r https://xxxx.xxxx.xxxx.xxxx:9443/ccm -n xxxx.xxxx.xxx.xxxx -u itsme -P gr^34dbtfgt7y");
stdin.close();
p.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
}
}
class SyncPipe implements Runnable {
public SyncPipe(InputStream istrm, OutputStream ostrm) {
istrm_ = istrm;
ostrm_ = ostrm;
}
public void run() {
try {
final byte[] buffer = new byte[1024];
for (int length = 0; (length = istrm_.read(buffer)) != -1;) {
ostrm_.write(buffer, 0, length);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private final OutputStream ostrm_;
private final InputStream istrm_;
}
我想从中获取数据:
ostrm_.write(buffer, 0, length);
我尝试了各种我在谷歌上找到的东西:
String string = new String(ostrm_.toString());
System.out.println(string);
String string = new String(ostrm_.toString("UTF-8"));
System.out.println(string);
final PrintStream blah = new PrintStream(ostrm_);
final String string = blah.toString();
System.out.println(string);
String blah = ostrm_.toString();
System.out.println(string);
byte[] blah = buffer;
String string = blah.toString();
我想我可以使用像 OutputStreamWriter 这样的东西,但我似乎无法让它工作。因此,如果 Java 大师能帮助我解决这个看似简单却很难的问题,那就太好了......
更新 1 用于引导和发动机罩:
【问题讨论】:
-
从输出流中获取数据没有意义。您已经提供了要写入的数据。这就是数据。
-
@user207421 你是对的但是我想把它保存到一个变量中,而不是把它写到控制台。
标签: java multithreading byte runnable outputstream