扫描仪比打印快?
Scanner faster than print?
我遇到了一个奇怪的问题。
到目前为止,我的代码如下所示:
String value = "";
Scanner scanner = new Scanner(System.in);
System.out.print("String 1");
System.out.println("String 2");
value = scanner.nextLine();
当我看到这个时,我希望程序打印以下内容
String 1String 2
然后它应该等我输入一些东西。
但是当我 运行 代码时,它是这样说的:
Exception in thread "main" String 1String2
java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
然后它告诉我发生错误的行。
所以对我来说,扫描仪似乎在打印字符串之前尝试扫描某些东西。
为什么会这样?
发生排序问题是因为字符串被写入标准输出,而异常(由于您的环境不允许键盘输入)被写入标准错误。
虽然首先写入字符串,但两条数据最终进入两个不同的队列(大概是管道缓冲区),它们之间没有固有的顺序。然后显示的顺序取决于 how/when 环境从两个队列读取输出并将它们合并以显示。
如果您想要可预测的顺序,则必须将两者写入同一基础流,因为单个流中的内容是有序的。
您可以从 Java 端将字符串写入 stderr(例如 System.err.println
),或者从环境端确保 stdout 和 stderr 指向同一个流(例如 shell java SomeProgram 2>&1
)
我遇到了一个奇怪的问题。
到目前为止,我的代码如下所示:
String value = "";
Scanner scanner = new Scanner(System.in);
System.out.print("String 1");
System.out.println("String 2");
value = scanner.nextLine();
当我看到这个时,我希望程序打印以下内容
String 1String 2
然后它应该等我输入一些东西。
但是当我 运行 代码时,它是这样说的:
Exception in thread "main" String 1String2
java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
然后它告诉我发生错误的行。
所以对我来说,扫描仪似乎在打印字符串之前尝试扫描某些东西。 为什么会这样?
发生排序问题是因为字符串被写入标准输出,而异常(由于您的环境不允许键盘输入)被写入标准错误。
虽然首先写入字符串,但两条数据最终进入两个不同的队列(大概是管道缓冲区),它们之间没有固有的顺序。然后显示的顺序取决于 how/when 环境从两个队列读取输出并将它们合并以显示。
如果您想要可预测的顺序,则必须将两者写入同一基础流,因为单个流中的内容是有序的。
您可以从 Java 端将字符串写入 stderr(例如 System.err.println
),或者从环境端确保 stdout 和 stderr 指向同一个流(例如 shell java SomeProgram 2>&1
)