0

0

Java里的InputStream是什么_Java字节输入流基础讲解

P粉602998670

P粉602998670

发布时间:2025-12-27 17:23:02

|

893人浏览过

|

来源于php中文网

原创

InputStream 是 Java 字节输入流抽象父类,定义统一读取接口,核心方法为 read()、read(byte[]) 和 read(byte[], int, int),使用需处理 IOException、显式关闭流或用 try-with-resources,并注意中文需显式指定字符编码。

java里的inputstream是什么_java字节输入流基础讲解

InputStream 是 Java 中所有字节输入流的抽象父类,位于 java.io 包中。它不直接创建实例,而是定义了从数据源(如文件、内存、网络等)按字节读取二进制数据的基本行为和统一方法。它的核心设计目标是“以字节为单位读取”,因此适用于任意类型文件——文本、图片、音频、视频等,只要底层是二进制格式。

InputStream 的核心作用

它提供了一套标准接口,让不同来源的数据读取方式保持一致。比如:

  • 硬盘文件读,用 FileInputStream
  • 从内存字节数组读,用 ByteArrayInputStream
  • 带缓冲提升性能,可包装成 BufferedInputStream
  • 读取基本类型(int、double 等),可用 DataInputStream

所有这些子类都继承 InputStream,并重写其 read() 方法来适配各自的数据源。

必须掌握的三个 read 方法

这三个方法是实际编码中最常调用的,理解它们的区别能避免常见错误:

立即学习Java免费学习笔记(深入)”;

LongShot
LongShot

LongShot 是一款 AI 写作助手,可帮助您生成针对搜索引擎优化的内容博客。

下载
  • int read():每次读 1 个字节,返回值是 int 类型(0–255),读到末尾返回 -1。适合小文件或逐字节解析场景,但效率低,不推荐用于大文件。
  • int read(byte[] b):尝试把最多 b.length 个字节读入数组 b,返回实际读取的字节数;读到末尾也返回 -1。这是最常用的方式,需注意返回值才是有效数据长度,不能直接把整个数组当字符串用。
  • int read(byte[] b, int off, int len):从数组索引 off 处开始,最多存 len 个字节。适合循环读取时复用缓冲区、避免频繁新建数组,例如配合 while 循环分块处理大文件。

使用时不可忽略的关键点

哪怕只是读一个文件,这几个细节出错就容易导致程序异常或资源泄漏:

  • 必须处理 IOException:所有 read 和 close 方法都抛出该异常,不能忽略。建议用 try-catch 或更优的 try-with-resources。
  • 必须显式关闭流:调用 close() 释放系统句柄(如文件描述符)。未关闭可能导致文件被占用、内存泄漏,甚至 JVM 资源耗尽。
  • 推荐用 try-with-resources:Java 7+ 支持自动关闭,代码更简洁安全。例如:
    try (FileInputStream fis = new FileInputStream("data.bin")) {
    int len = fis.read(buffer);
    }
    —— 不用手动 close,也无需 finally 块。
  • 中文乱码不是 InputStream 的问题:它只管读字节,不管字符编码。要把字节转成中文,得用 new String(bytes, 0, len, "UTF-8") 显式指定编码,否则默认平台编码可能出错。

典型使用流程(以读文件为例)

三步走,缺一不可:

  • 创建 FileInputStream 实例,传入文件路径或 File 对象
  • 循环调用 read 方法(推荐带 byte[] 的重载),检查返回值是否为 -1 来判断结束
  • 在 try-with-resources 或 finally 中确保 close 执行

不复杂但容易忽略。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

717

2023.06.15

java流程控制语句有哪些
java流程控制语句有哪些

java流程控制语句:1、if语句;2、if-else语句;3、switch语句;4、while循环;5、do-while循环;6、for循环;7、foreach循环;8、break语句;9、continue语句;10、return语句。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

455

2024.02.23

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

722

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

727

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

394

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

398

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

441

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

428

2023.08.02

ip地址修改教程大全
ip地址修改教程大全

本专题整合了ip地址修改教程大全,阅读下面的文章自行寻找合适的解决教程。

27

2025.12.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.1万人学习

C# 教程
C# 教程

共94课时 | 5.5万人学习

Java 教程
Java 教程

共578课时 | 38.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号