java 11+ 中 inputstreamreader 仍支持 charset 构造函数,推荐使用 standardcharsets.utf_8 等 charset 对象而非字符串编码名,避免 unsupportedencodingexception,配合 try-with-resources 和 bufferedreader 使用更安全高效。

Java 11+ 中 InputStreamReader 仍然支持带 Charset 参数的构造函数,用法与旧版本一致,无需额外处理 —— 它没有被弃用,也没有移除。
直接使用 Charset 对象构造
这是最推荐的方式,类型安全、语义清晰:
new InputStreamReader(inputStream, StandardCharsets.UTF_8)new InputStreamReader(inputStream, Charset.forName("GBK"))new InputStreamReader(inputStream, Charset.defaultCharset())
避免使用字符串编码名(不推荐)
虽然 new InputStreamReader(inputStream, "UTF-8") 在 Java 11+ 仍可用,但它会抛出 UnsupportedEncodingException(检查异常),而用 Charset 对象则完全避免该异常,代码更简洁健壮。
常见搭配:配合 Files.newInputStream 或其他 InputStream
例如读取本地文件时:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
InputStream is = Files.newInputStream(Paths.get("data.txt"));InputStreamReader reader = new InputStreamReader(is, StandardCharsets.UTF_8);
注意:务必在使用后关闭 InputStreamReader(或其底层流),建议用 try-with-resources。
与 BufferedReader 组合使用(典型场景)
实际开发中常嵌套使用:
try (InputStreamReader isr = new InputStreamReader(inputStream, StandardCharsets.UTF_8);BufferedReader br = new BufferedReader(isr)) {// 读取逻辑}
这样既能指定字符集,又能享受缓冲读取的效率。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










