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

js2java
JavaScript 到 Java 全栈翻译助手,专为前端开发者学习 Java 或快速实现后端业务逻辑而设计。当用户提到以下场景时必须使用此技能: - "帮我把这段 JS 代码转成 Java" - "用 Java 怎么写这个逻辑" - "我习惯用 JS 写,想翻译成 Java" - "教我 Java,我要写后端接...
下载
<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>
<ul>
<li><code>String line = reader.readLine();</code> —— 读一行,返回<code>null</code>表示流结束</li>
<li><code>int ch = reader.read();</code> —— 读单个字符(注意返回<code>int</code>,需转<code>char</code>)</li>
</ul>
<H3>常见简写(开发中常用但有隐患)</H3>
<p>不指定编码时依赖系统默认,Windows常为GBK,Linux/macOS多为UTF-8:</p>
<p><font color="blue">BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));</font></p>
<p>如果只处理ASCII或确定运行环境统一,可临时使用;否则建议始终显式指定<code>StandardCharsets.UTF_8</code>。</p>
<H3>别忘了关闭资源</H3>
<p><code>BufferedReader</code>实现了<code>AutoCloseable</code>,推荐用try-with-resources自动释放:</p>
<p><font color="blue">try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8))) {<br> String input = reader.readLine();<br> // 处理input<br>}</font></p>
<p>这样即使发生异常,流也会被正确关闭,避免资源泄漏。</p>