java基础-InputStream 类

InputStream是 Java 中所有字节输入流的抽象基类,位于java.io包中。它定义了读取字节数据的基本方法。

一、核心特性

  1. 抽象类- 不能直接实例化,需要通过子类实现

  2. 字节流- 以字节(byte)为单位读取数据

  3. 单字节读取- 最基本的读取单位是单个字节(0-255)

  4. 流式访问- 顺序读取,通常不支持随机访问

二、常用方法

// 基本读取方法 int read() // 读取单个字节,返回0-255,-1表示结束 int read(byte[] b) // 读取到字节数组,返回实际读取字节数 int read(byte[] b, int off, int len) // 读取指定长度到数组的指定位置 // 其他重要方法 long skip(long n) // 跳过指定字节数 int available() // 返回可读取的字节数(估计值) void close() // 关闭流,释放资源 void mark(int readlimit) // 标记当前位置 void reset() // 重置到标记位置 boolean markSupported() // 是否支持标记/重置

三、主要子类

1. 文件输入流

FileInputStream fis = new FileInputStream("file.txt");

2. 字节数组输入流

ByteArrayInputStream bais = new ByteArrayInputStream(byteArray);

3. 缓冲输入流(装饰器)

BufferedInputStream bis = new BufferedInputStream(inputStream);

4. 对象输入流(反序列化)

ObjectInputStream ois = new ObjectInputStream(inputStream);

5. 其他子类

  • PipedInputStream- 管道流

  • SequenceInputStream- 序列流

  • FilterInputStream- 过滤流基类

  • DataInputStream- 读取基本数据类型

四、使用示例

示例1:基本读取

try (InputStream is = new FileInputStream("test.txt")) { int data; while ((data = is.read()) != -1) { System.out.print((char) data); } } catch (IOException e) { e.printStackTrace(); }

示例2:使用缓冲区读取

try (InputStream is = new FileInputStream("largefile.bin"); BufferedInputStream bis = new BufferedInputStream(is)) { byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = bis.read(buffer)) != -1) { // 处理读取的数据 processData(buffer, bytesRead); } } catch (IOException e) { e.printStackTrace(); }

示例3:读取到字节数组

public static byte[] readAllBytes(InputStream inputStream) throws IOException { ByteArrayOutputStream buffer = new ByteArrayOutputStream(); byte[] data = new byte[4096]; int bytesRead; while ((bytesRead = inputStream.read(data, 0, data.length)) != -1) { buffer.write(data, 0, bytesRead); } return buffer.toByteArray(); }

五、重要注意事项

1.资源管理

// 推荐使用 try-with-resources try (InputStream is = new FileInputStream("file.txt")) { // 使用流 } // 自动关闭

2.读取性能

  • 单字节读取性能差,建议使用缓冲区

  • BufferedInputStream可以显著提升性能

  • 合适的缓冲区大小(通常4KB-8KB)

3.异常处理

try { // 读取操作 } catch (IOException e) { // 处理IO异常 } finally { // 确保关闭资源(try-with-resources更优) }

4.标记/重置限制

  • 不是所有流都支持mark()reset()

  • 标记有读取限制(readlimit参数)

  • 调用reset()前必须先调用mark()

六、与 Reader 的区别

特性InputStreamReader
单位字节(byte)字符(char)
编码无编码概念使用字符编码
范围0-255Unicode字符
子类FileInputStream等FileReader等

七、最佳实践

  1. 始终关闭流- 使用 try-with-resources

  2. 使用缓冲区- 特别是对于文件或网络流

  3. 检查返回值-read()方法可能读取不到预期字节数

  4. 考虑使用 NIO- 对于高性能需求,考虑Files.newInputStream()

  5. 处理中断- 考虑使用Thread.interrupted()检查

八、Java 9+ 新增方法

// Java 9 新增 byte[] readAllBytes() // 读取所有字节 long transferTo(OutputStream out) // 直接传输到输出流 // Java 11 新增 byte[] readNBytes(int len) // 精确读取指定数量的字节

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1220263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2026年四川丧葬一条龙哪家强?四川公墓咨询、绵阳公墓推荐——孝爱领衔五大品牌,温情守护生命终章

引言 生命的落幕,需要庄重与温情的守护,殡葬服务的品质直接关乎逝者尊严与生者慰藉。在四川殡葬行业规范化发展的当下,如何挑选正规专业的丧葬一条龙服务,成为许多家庭的难题。为提供客观参考,我们依托行业协会标…

DSU

DSUstruct DSU {int n;vector<int> p, sz;DSU() : n(0) {}DSU(int n_) { init(n_); }void init(int n_) {n = n_;p.resize(n + 1);sz.assign(n + 1, 1);iota(p.begin(), p.end(), 0);}int find(int x) {if (x !=…

2026年架空地板厂家推荐:机房架空地板、水泥纤维网络架空地板、活动架空地板、玻璃防静电地板、硫酸钙防静电地板选择指南

2026西南地区架空地板优质厂家推荐榜根据《2026年中国防静电与架空地板行业发展白皮书》显示,2026年国内架空地板市场规模达180亿元,年复合增长率12.3%,其中西南地区以数据中心、智能工业园为代表的新兴场景需求增速…

BIT

BITstruct BIT {int n;vector<int> tr, vis;int tag;BIT(int _n = 0) { tag = 1; if (_n) init(_n); }void init(int _n) {n = _n;tr.assign(n + 1, 0);vis.assign(n + 1, 0);tag = 1;}int lowbit(int x) { retu…

Writeup:看雪AliCrackme_1

打开App需要输入密码,没加固直接看代码 //从图片中提取加密映射表 protected String getTableFromPic() throws IOException {InputStream is = null;String value = "";try {try {is = getResources().get…

从技术狂欢到价值兑现,AI大模型下半场怎么打?

接下来的一年&#xff0c;大模型赛道或将迎来更深度的整合与创新。 ©TMT星球原创 作者&#xff5c;黄燕华 日前&#xff0c;阿里AI大模型千问在杭州举行产品发布会引发业内广泛关注。 会上&#xff0c;阿里宣布千问全面接入淘宝、支付宝、高德、飞猪等业态&#xff0c;…

基于springboot的大学生志愿服务活动管理系统(源码+论文+部署+安装)

感兴趣的可以先收藏起来&#xff0c;还有在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望可以帮到大家。一、程序背景随着社会发展&#xff0c;志愿服务在各领域作用愈发凸显&#xff0c;大学生作为志愿服务主力…

毕设 stm32的火灾监控与可视化系统(源码+硬件+论文)

文章目录 0 前言1 主要功能2 硬件设计(原理图)3 核心软件设计4 实现效果5 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉…

做自媒体数据复盘工具,导入平台播放量,点赞量,评论量,涨粉数,按日/周统计数据变化,分析高赞作品共性,生成复盘报告。

自媒体数据复盘工具 - 全栈开发实践 1. 实际应用场景描述 本工具专为短视频创作者、公众号作者、播客主播、直播达人等自媒体从业者设计&#xff0c;提供全方位的数据分析和复盘服务。随着自媒体行业的快速发展&#xff0c;内容创作者面临着激烈的市场竞争和用户注意力分散的挑…

爆火的Clawdbot全解析:功能、适配人群与国内本地化配置指南

近期一款名为Clawdbot的AI工具席卷科技圈&#xff0c;甚至引发Mac mini一机难求&#xff0c;它打破了传统AI“只回答不做事”的局限&#xff0c;成为能在本地设备24小时工作的“全职AI员工”。作为开源的自托管式个人AI助手&#xff0c;Clawdbot需通过指定通信通道接收指令&…

毕业 10 年学长忠告:这两件事别盲目跟风,AI 时代选对路比努力更重要

作为已经毕业 10 年的学长&#xff0c;今天想跟在校的学弟学妹们掏心窝子聊聊 —— 当年我踩过的坑&#xff0c;希望你们别再重蹈覆辙。尤其是在 AI 即将重塑职场的当下&#xff0c;有些选择真的会影响未来多年的发展轨迹。记得本科毕业时&#xff0c;我跟现在很多同学一样&…

2026年重庆公办职高哪家值得选 这些优质院校值得关注 择校指南

随着职业教育提质培优政策落地,2026年重庆公办职高的办学质量持续升级,工学一体化教学、产教融合深度合作等成为主流趋势。公办职高的专业适配性、实训条件直接影响未来就业与升学。重庆能源工业技师学院 基础信息:…

2026西南木基架空地板优质厂家推荐

2026西南木基架空地板优质厂家推荐一、行业背景与采购痛点解析根据《2026-2030年中国架空地板行业发展白皮书》显示,2026年国内架空地板市场规模突破120亿元,其中西南地区因数据中心集群建设、智能办公楼宇扩容等需求…

centos7 使用rc-local.service 开机启动挂载

使用rc-local.service 1‌. 创建挂载脚本‌:在/etc/rc.d/rc.local文件中添加挂载命令。首先确保该文件存在且可执行:sudo vi /etc/rc.d/rc.local在文件末尾添加挂载命令: /bin/mount /dev/sdb1 /mnt/mydisk‌ 2 使…

zabbix-监控swarm集群

zabbix-监控swarm集群1、创建监控脚本[root@localhost script]# pwd /etc/zabbix/zabbix_agentd.d/script [root@localhost script]# cat * ## manager.sh docker info --format {{.Swarm.ControlAvailable}} 2>/de…

[转载] THINKPAD P71电脑清灰拆机

原文链接:https://www.bilibili.com/read/cv21298406/?opus_fallback=1 B站的失落迷宫 2023年01月19日 01:35发表的,thinkpad p71移动工作站拆机清灰顺便换硅脂,p70和p72磨具大概差不多。第一步:D面电池取掉并把硬…

写入即定局:OTP存储的永久锁定特性与操作风险防范

在嵌入式系统与安全芯片设计中,OTP存储因其“写入即锁定”的特性被广泛用于保存密钥、配置信息等关键数据。然而,这种一次性的写入机制意味着一旦执行,数据将不可更改、不可擦除,形成永久性记录。因此,操作前必须…

《新手必看:Amazon 日本站批量注册+养号工具攻略》

在近期的 Amazon 日本站注册和运营中&#xff0c;许多卖家都遇到了一些普遍问题&#xff1a;注册流程繁琐、身份和邮箱验证严格&#xff0c;账号刚上线就出现加购或下单异常&#xff0c;多账号同时操作时环境容易相互干扰。这些问题让新手卖家无从下手&#xff0c;也让有多账号…

Node.js用process.chdir切换工作目录

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Node.js的隐秘陷阱&#xff1a;process.chdir的深层风险与现代实践革新 目录 Node.js的隐秘陷阱&#xff1a;process.chdir的深层…

SSM微博舆情监控可视化系统-计算机毕业设计源码26994

摘要 本文聚焦于基于SSM框架的微博舆情监控可视化系统的设计与实现。随着微博平台信息量的爆炸式增长&#xff0c;舆情监控与管理需求愈发迫切。该系统旨在为管理员和普通用户提供全面、高效的舆情服务。 在系统设计方面&#xff0c;采用SSM框架构建分层架构&#xff0c;确保系…