在 Java 中InputStream是java.io包中的一个抽象类代表字节输入流用于从源如文件、网络连接、内存缓冲区等读取原始字节数据8位。它是所有字节输入流的父类常见子类包括FileInputStream从文件读取字节ByteArrayInputStream从字节数组读取BufferedInputStream为其他输入流添加缓冲功能提升读取性能ObjectInputStream支持反序列化对象需配合SerializableSystem.in标准输入流类型为InputStream通常被包装为Scanner或BufferedReader使用⚠️ 注意InputStream处理的是字节byte不直接处理字符char或文本编码若需读取文本如 UTF-8 字符串应配合InputStreamReader桥接字节流与字符流和BufferedReader使用。示例读取文件前10个字节try(InputStreamisnewFileInputStream(data.bin)){intb;intcount0;while((bis.read())!-1count10){System.out.printf(0x%02X ,b);// 以十六进制打印count;}}catch(IOExceptione){e.printStackTrace();}InputStream和Reader如InputStreamReader的核心区别在于数据抽象层级与处理单位不同维度InputStreamReader字符流数据单位字节byte8位字符char16位 Unicode 码元用途定位通用二进制数据读取图片、音频、序列化对象、任意字节流文本数据读取字符串、源代码、配置文件等人类可读内容编码处理❌ 不涉及字符编码原样读取字节不理解“文本”含义✅ 显式依赖字符编码如 UTF-8、GBK通过InputStreamReader将字节按指定编码解码为字符继承体系属于java.io中的字节流体系InputStream→FilterInputStream→ …属于字符流体系Reader→InputStreamReader→BufferedReader→ …典型使用场景读取.jpg,.class,ObjectInputStream, 网络原始报文读取.txt,.json,.xml, 日志文件等需按文本语义解析的内容 关键桥梁InputStreamReader是字节流到字符流的桥接器——它以InputStream为源按指定Charset如StandardCharsets.UTF_8将字节解码为字符从而让Reader体系能安全处理文本。✅ 正确用法示例避免乱码// ✅ 推荐显式指定编码防止平台默认编码导致问题try(InputStreamisnewFileInputStream(hello.txt);ReaderreadernewInputStreamReader(is,StandardCharsets.UTF_8);BufferedReaderbrnewBufferedReader(reader)){Stringline;while((linebr.readLine())!null){System.out.println(line);}}❌ 错误示范隐式使用平台默认编码高风险newInputStreamReader(newFileInputStream(hello.txt));// ⚠️ 危险编码不可控