java中用bufferedreader读取system.in需经inputstreamreader转码为字符流,再由bufferedreader提供readline()等方法并缓冲提升性能;推荐显式指定utf-8编码并用try-with-resources自动关闭资源。

<p>Java中用<code>BufferedReader</code>读取<code>System.in</code>,核心是先用<code>InputStreamReader</code>把字节流转成字符流,再用<code>BufferedReader</code>包装它来支持高效、按行读取。</p> <h3>为什么要套三层?</h3> <p><code>System.in</code>是<code>InputStream</code>(字节流),不能直接读字符串;<code>InputStreamReader</code>负责按指定编码(如UTF-8)把字节解码成字符;<code>BufferedReader</code>在此基础上提供<code>readLine()</code>等便捷方法,并带缓冲提升性能。</p> <h3>标准写法(推荐带编码)</h3> <p>避免平台默认编码导致乱码,显式指定UTF-8:</p> <p><font color="blue">BufferedReader reader = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8));</font></p> <p>之后就可以安全调用:</p>
-
String line = reader.readLine();—— 读一行,返回null表示流结束 -
int ch = reader.read();—— 读单个字符(注意返回int,需转char)
常见简写(开发中常用但有隐患)
不指定编码时依赖系统默认,Windows常为GBK,Linux/macOS多为UTF-8:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
如果只处理ASCII或确定运行环境统一,可临时使用;否则建议始终显式指定StandardCharsets.UTF_8。
别忘了关闭资源
BufferedReader实现了AutoCloseable,推荐用try-with-resources自动释放:
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8))) {
String input = reader.readLine();
// 处理input
}
这样即使发生异常,流也会被正确关闭,避免资源泄漏。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











