只是为了更好地理解我在讲座中听到的内容(关于Java输入和输出流),我自己做了这个小程序:
public static void main (String[] args) throws Exception {
int input;
FileOutputStream fos = new FileOutputStream("test.txt");
// 95 is the underscore-char ( _ ). I use it
// for to finish it reception of input.
while ((input = System.in.read()) != 95) {
fos.write(input);
out.println(input);
}
out.println("- Finished -");
fos.close();
}
它打印我刚刚输入到stdout的字符的数字表示.
它基本上有效,但这是我在Eclipse中看到的:

“10”是换行符的十进制ASCII表示.
好的.我按下了回车键来完成迭代.
但为什么第二个值也出现了呢?
我希望只出现第一个键(实际字符).
如果以某种方式可以解释这个问题,那么我会很感激他/她的回答.
@Sanket Makani
这是文本文件“text.txt”的相应内容:
2
3
A
a
在Eclipse中:

解决方法:
InputStreams可用于二进制格式,二进制格式不关心过滤新行字符.
您需要自己过滤它们,或者使用缓冲读取器/扫描仪和读取线,然后沿着字符串中的字符进行迭代.
显示它确实一次只读取一个字符,但是在按Enter键之前,eclipse终端可能不会转发输入的数据.
当发生这种情况时,你的循环运行两次.
标签:java,eclipse
来源: https://codeday.me/bug/20190611/1217424.html