一个相关的问题是:为 InputStreamReader 定义此行为的规范在哪里?,但我不确定它是否能回答我的问题......请注意,我只是在尝试使用这种语言。我有这个代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Capitalize {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new InputStreamReader(
System.in))) {
char c;
do {
c = Character.toUpperCase((char) br.read());
System.out.print(c);
} while (c != (char) -1);
} catch (IOException e) {
e.printStackTrace(System.err);
}
}
}
使用 ubuntu linux,我期望输出是这样的:
fFoOoO bBaArR
但相反,它是这样的:
foo bar (line feed)
FOO BAR (waits for more characters or Ctrl + D)
现在我不确定 Windows 中的行为是什么,可能是不同的,但这仍然让我有点困惑。阅读该read
方法的文档,我发现如果到达流的末尾,它只会返回 -1。我有点理解这对于读取文件是如何工作的,但是在这种情况下,控制台怎么样?为什么必须等到输入 Ctrl + D ?有什么方法可以在不输入 Ctrl + D 的情况下到达流的末尾?有没有办法实现我的期望?
提前致谢