Java:输入流中的垃圾

标签 java runtime

我编写了一个小型 Java 函数,它调用另一个 Java 程序并显示其输入。

private static void call() throws Exception 
{
    int  line;                             
    ///Other stuff here
    Process p2= Runtime.getRuntime().exec("java SelfModifying");
    InputStream is = p2.getInputStream();
    //p.waitFor();
    while ((line = is.read()) != -1) {
        System.out.println("result: " + line);
    }       
    Runtime.getRuntime().exit(0);
}

调用的程序应该返回一个 int 值:'10'。
相反,我得到 4 行: 结果:49 结果:48 结果:13 结果:10

其他三个值从哪里来?它们是确定性的,但似乎来自输入。当我单独运行该程序时,它不会返回这 3 行。

最佳答案

您正在从流中读取单个字节:

  • 49 是 ASCII '1'
  • 48 是 ASCII '0'
  • 13 是 ASCII '\r'
  • 10 是 ASCII '\n'

因此文件的内容为 10\r\n(10,后跟 Windows 换行符)。

您应该将 is 包装在扫描仪中:

Scanner scanner = new Scanner(is, "UTF-8");
System.out.println(scanner.nextInt());

关于Java:输入流中的垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35945637/

相关文章:

Java URLClassloader 挂起

delphi - 如何在运行时创建摘要页脚?

java - 无法跟踪函数内的变量并将它们存储在java的数据结构中

java - 删除字符串Java中的单引号

java - 待澄清的简单多线程代码

java - Java程序中如何获取环境变量(被外部修改)的修改值?

java - 弹出窗口转到第一个或第二个

java - onclick 监听器(this)是什么意思?

python - 为什么我的随机主元快速排序比固定主元快速排序慢?

runtime - 运行 PowerBuilder 应用程序