Java:输入流中的垃圾
Java: trash in input Stream
我编写了一个小的 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 调用的程序应该return 一个单一的 int 值:'10'。
相反,我得到 4 行:
结果:49
结果:48
结果:13
结果:10
其他三个值从何而来?它们是确定性的,但似乎来自输入。当我 运行 程序本身时,它不会 return 这 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 函数,它调用另一个 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 调用的程序应该return 一个单一的 int 值:'10'。
相反,我得到 4 行:
结果:49
结果:48
结果:13
结果:10
其他三个值从何而来?它们是确定性的,但似乎来自输入。当我 运行 程序本身时,它不会 return 这 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());