Java:输入流中的垃圾
我编写了一个调用另一个java程序并显示其输入的小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
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
。