Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:输入流中的垃圾_Java_Runtime - Fatal编程技术网

Java:输入流中的垃圾

Java:输入流中的垃圾,java,runtime,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

我编写了一个调用另一个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);
}
gests调用的prorgam应该返回单个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());

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

  • 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());

为什么要麻烦?为什么不启动一个类加载器,加载另一个主类并通过反射直接调用
main
?另外,盲目地将从
输入流
(一个字节)读取的结果转换为
字符串
,不会产生任何有用的结果。您需要使用具有正确编码集的
InputStreamReader
。何必麻烦呢?为什么不启动一个类加载器,加载另一个主类并通过反射直接调用
main
?另外,盲目地将从
输入流
(一个字节)读取的结果转换为
字符串
,不会产生任何有用的结果。您需要使用具有正确编码集的
InputStreamReader