当前位置: 首页 > news >正文

【Java IO 笔记】从一段课堂代码看文件读取:为什么不能直接转 String?

前言

今天有一段使用 FileInputStream 读取文件的经典代码。乍一看,这段代码逻辑清晰:打开文件、循环读取、打印内容、关闭流。但如果仔细盯着那个红色的  while  循环和下面的  String  构造方法看,就会发现里面藏着 Java IO 编程中几个非常重要的细节。

今天这篇随笔,就讨论为什么我们读取文件时要用 byte[] 数组,以及那个神秘的变量 a 到底起了什么作用。
25e4b45169f648f25af7af4f7b66cbe5

1.为什么要用 byte[] 数组(缓冲区)?

很多初学者会问:“为什么不直接一个字节一个字节地读?”

这就涉及到了 IO 效率 的问题。硬盘的读写速度远慢于内存和 CPU。如果每次只读 1 个字节,就要进行一次磁盘 IO 操作,这就像去超市买东西,买一颗糖跑一趟,买一瓶水又跑一趟,效率极低。

代码中的  byte[] tom = new byte[18]  就是所谓的 “缓冲区”。它的作用是一次性从硬盘搬运 18 个字节到内存中。虽然 18 个字节在实际开发中显得很小(通常我们会用 1024 或 8192),但在教学演示中,它能很好地帮助我们观察数据是如何分批到达的。

  1. 核心难点解析:变量 a 的重要性
    while((a=in.read(tom, 0, 18)) != -1)
    这里的  in.read(tom, 0, 18)  做了三件事:

尝试读取最多 18 个字节的数据。

将读到的数据存入  tom  数组。

返回实际读取的字节数,赋值给变量  a 。

关键点来了: 当文件读到末尾时,剩余的内容可能不足 18 个字节。比如文件还剩 5 个字节,那么  read  方法只会往数组里填 5 个字节,并返回  5 。此时,数组的第 6 到第 18 个位置,保留的还是上一次读取的旧数据!

这就是为什么下一行代码必须写成:
String s = new String(tom, 0, a);
而不是简单的  new String(tom) 。

new String(tom) :会把数组里所有的 18 个字节都转成字符串,导致最后一段内容后面跟着一堆乱码或重复的旧数据。

new String(tom, 0, a) :明确告诉构造函数,“我只需要数组里从 0 开始的前  a  个字节”,从而精准地还原了文件内容。

  1. 总结与思考

这段简短的代码其实涵盖了 IO 流的三个基本功:

File 对象的使用:通过父路径和子文件名构建文件对象。

缓冲读取:利用数组减少 IO 次数。

边界处理:利用返回值 a 处理最后一次读取可能不满缓冲区的情况。

http://www.jsqmd.com/news/994938/

相关文章:

  • [智能体-364]: Deep Agents,什么样的代码是在沙箱中执行?
  • 别只背公式!用gmpy2手把手还原RSA共模攻击,从BUUCTF Samemod理解扩展欧几里得
  • Athena+S3直接SQL查询实战:零运维高效分析指南
  • 2026辽源市民优选 5 家水质检测服务机构 饮用水污水废水检测实地走访测评整理 - 中安检测集团
  • AzerothCore学习笔记·数据库05:模板表设计——核心字段演化逻辑
  • [实战] 2026年供应链质量管理(SQM)数字化转型:从图纸识别到检验计划自动化
  • 2026肇庆电能质量评估权威机构排行 TOP 谐波检测 + 电压波动 + 能效测评 附电话地址 - 中检检测集团
  • 2026马鞍山企业业主高频选择的 5 家危房检测房屋结构安全鉴定机构实地测评整理 - 科信检测
  • 2026漳州企业业主高频选择的 5 家危房检测房屋结构安全鉴定机构实地测评整理 - 科信检测
  • 工业级遗传算法实战:多样性维持、约束处理与自适应收敛
  • 20260611 之所思 - 人生如梦
  • 2026呼和浩特电能质量评估权威机构排行 TOP 谐波检测 + 电压波动 + 能效测评 附电话地址 - 中检检测集团
  • LabVIEW软管脉冲疲劳试验
  • 终极DS4Windows配置指南:让PlayStation手柄在PC上完美运行
  • 2026玉林企业业主高频选择的 5 家危房检测房屋结构安全鉴定机构实地测评整理 - 科信检测
  • 2026宁波市北仑区家里卫生间漏水、阳台漏水、楼顶漏水、阳台漏水、地下室渗水、阳光房漏水各种房屋漏水情况不用愁!售后无忧,线上质保可查。本地防水补漏公司为您排忧解难! - 防水百科
  • MATLAB电力系统稳态分析工具包:含潮流与最优潮流计算功能,支持2021–2024版
  • 2026六安电能质量评估权威机构排行 TOP 谐波检测 + 电压波动 + 能效测评 附电话地址 - 中检检测集团
  • 【轨迹跟踪】基于Rovere的滑移引导轨迹跟踪附Matlab代码
  • 2026黄山市民优选 5 家水质检测服务机构 饮用水污水废水检测实地走访测评整理 - 中安检测集团
  • 2026重庆企业业主高频选择的 5 家危房检测房屋结构安全鉴定机构实地测评整理 - 科信检测
  • 为创维e900v22c电视盒子构建CoreELEC媒体中心系统
  • 基于蔡格尼克效应的消费激励模型设计与落地分析
  • 2026来宾电能质量评估权威机构排行 TOP 谐波检测 + 电压波动 + 能效测评 附电话地址 - 中检检测集团
  • 2026荆门电能质量评估权威机构排行 TOP 谐波检测 + 电压波动 + 能效测评 附电话地址 - 中检检测集团
  • 遗传算法工程化实践:从教科书到电商多目标优化
  • 2026运城电能质量评估权威机构排行 TOP 谐波检测 + 电压波动 + 能效测评 附电话地址 - 中检检测集团
  • 工程单据Agent采购避坑:无节点追踪产品如何利用实在Agent实现溯源追责?
  • 2026江门市民优选 5 家水质检测服务机构 饮用水污水废水检测实地走访测评整理 - 中安检测集团
  • 2026江苏企业业主高频选择的 5 家危房检测房屋结构安全鉴定机构实地测评整理 - 科信检测