最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中FileInputStream的read()方法代碼示例詳解

 更新時(shí)間:2026年03月05日 11:43:32   作者:Stronger劃水高手  
文章總結(jié)Java中FileInputStream的兩個(gè)read()方法的區(qū)別,通過對比兩種方法的使用場景、關(guān)鍵點(diǎn)和設(shè)計(jì)原因,強(qiáng)調(diào)了批量讀取在實(shí)際生產(chǎn)環(huán)境中的重要性,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

我發(fā)現(xiàn)java中的FileInputStream的read()方法,通過字節(jié)數(shù)組讀取和字節(jié)讀取,一個(gè)是返回讀取字節(jié)的長度,一個(gè)是返回字節(jié)代表的值。

這是 FileInputStream 兩個(gè) read() 方法的核心區(qū)別,直接決定了使用場景:

兩個(gè)read()方法對比

方法簽名返回值作用使用場景
int read()0-255 的字節(jié)值,或 -1(文件結(jié)束)逐字節(jié)讀取小文件、簡單演示、需要逐字節(jié)處理
int read(byte[] b)實(shí)際讀取的字節(jié)數(shù)(0 到 b.length),或 -1(文件結(jié)束)批量讀取到緩沖區(qū)大文件、高效處理、網(wǎng)絡(luò)傳輸

代碼示例對比

1. 逐字節(jié)讀?。ǚ祷刈止?jié)值)

FileInputStream fis = new FileInputStream("test.txt");
int data;  // 注意是 int,不是 byte!
while ((data = fis.read()) != -1) {
    // data 是 0-255 的字節(jié)值,或 -1 表示結(jié)束
    System.out.print((char) data);  // 轉(zhuǎn)為字符顯示
}
fis.close();

關(guān)鍵點(diǎn)

  • 返回值 int 是為了兼容 -1byte 范圍是 -128~127,無法表示 -1)
  • 每次只讀 1 個(gè)字節(jié),效率極低

2. 批量讀?。ǚ祷刈x取長度)

FileInputStream fis = new FileInputStream("test.txt");
byte[] buffer = new byte[1024];  // 1KB 緩沖區(qū)
int bytesRead;  // 實(shí)際讀到的字節(jié)數(shù)
while ((bytesRead = fis.read(buffer)) != -1) {
    // bytesRead 告訴本次讀了多少字節(jié)(可能 < 1024)
    String chunk = new String(buffer, 0, bytesRead, "UTF-8");
    System.out.print(chunk);
}
fis.close();

關(guān)鍵點(diǎn)

  • buffer 是"容器",方法把數(shù)據(jù)填充進(jìn)去
  • bytesRead 告訴你實(shí)際裝了多少(最后一次可能不滿)
  • 必須用 new String(buffer, 0, bytesRead),不能用全部 buffer,否則末尾有垃圾數(shù)據(jù)

為什么這樣設(shè)計(jì)?

設(shè)計(jì)原因解釋
逐字節(jié)返回 int需要區(qū)分 0-255 的有效字節(jié)-1 的結(jié)束標(biāo)志,byte 無法做到
批量返回長度數(shù)組已經(jīng)裝了數(shù)據(jù),只需告訴"裝了多少",避免重復(fù)拷貝
減少系統(tǒng)調(diào)用批量讀一次磁盤,比逐字節(jié)讀 1024 次快 100 倍以上

常見錯(cuò)誤

// ? 錯(cuò)誤:忽略 bytesRead,直接用整個(gè) buffer
while (fis.read(buffer) != -1) {
    String s = new String(buffer);  // 末尾可能有上次殘留的垃圾!
}
// ? 正確:只用讀到的前 bytesRead 個(gè)字節(jié)
while ((bytesRead = fis.read(buffer)) != -1) {
    String s = new String(buffer, 0, bytesRead, "UTF-8");
}

一句話總結(jié)

  • read()“給我一個(gè)字節(jié)”,返回那個(gè)字節(jié)的值(或 -1 結(jié)束)
  • read(byte[])“給我一堆字節(jié),裝這個(gè)數(shù)組里”,返回裝了多少個(gè)(或 -1 結(jié)束)

批量讀是生產(chǎn)環(huán)境唯一選擇,逐字節(jié)讀只用來學(xué)習(xí)原理或處理極小文件。

到此這篇關(guān)于Java中FileInputStream的read()方法代碼示例詳解的文章就介紹到這了,更多相關(guān)java fileInputstream的read()方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring?Boot?攔截器幫助解鎖5種常用場景(推薦)

    Spring?Boot?攔截器幫助解鎖5種常用場景(推薦)

    在SpringBoot中,攔截器用于在請求處理前后插入自定義邏輯,實(shí)現(xiàn)權(quán)限校驗(yàn)、日志記錄、性能監(jiān)控等功能,本文給大家介紹Spring?Boot?攔截器幫助解鎖5大實(shí)用場景,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • Spring中@Cacheable注解的使用詳解

    Spring中@Cacheable注解的使用詳解

    這篇文章主要介紹了Spring中@Cacheable注解的使用詳解,Spring框架提供了@Cacheable注解來輕松地將方法結(jié)果緩存起來,以便在后續(xù)調(diào)用中快速訪問,本文將詳細(xì)介紹@Cacheable注解的使用方法,并從源碼級別解析其實(shí)現(xiàn)原理,需要的朋友可以參考下
    2023-11-11
  • java項(xiàng)目中classpath指向哪里

    java項(xiàng)目中classpath指向哪里

    這篇文章介紹了java項(xiàng)目中classpath指向哪里及工作原理,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • 解決springcloud-eureka注冊時(shí)的ip問題

    解決springcloud-eureka注冊時(shí)的ip問題

    這篇文章主要介紹了解決springcloud-eureka注冊時(shí)的ip問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java使用Alibaba Druid數(shù)據(jù)庫連接池的技術(shù)指南

    Java使用Alibaba Druid數(shù)據(jù)庫連接池的技術(shù)指南

    Druid是阿里巴巴開源平臺上的一個(gè)項(xiàng)目,整個(gè)項(xiàng)目由數(shù)據(jù)庫連接池、插件框架和SQL解析器組成,它不僅支持高效的連接管理,還集成了 SQL 監(jiān)控、日志輸出和多種擴(kuò)展功能,本文將從 Druid 的基本概念出發(fā),結(jié)合具體樣例,帶你全面掌握 Druid 的配置與使用,需要的朋友可以參考下
    2025-03-03
  • spring mvc 組合mybatis框架實(shí)例詳解

    spring mvc 組合mybatis框架實(shí)例詳解

    本項(xiàng)目采用 maven 結(jié)構(gòu),主要演示了 spring mvc + mybatis,controller 獲取數(shù)據(jù)后以json 格式返回?cái)?shù)據(jù)。對spring mvc 組合mybatis的方法感興趣的朋友可以參考下本文
    2018-01-01
  • Java實(shí)現(xiàn)在Word文檔中添加批注的示例代碼

    Java實(shí)現(xiàn)在Word文檔中添加批注的示例代碼

    在現(xiàn)代辦公環(huán)境中,Word文檔已成為信息傳遞和協(xié)作的重要載體,本教程將深入探討如何利用Java實(shí)現(xiàn)Word文檔批注的自動化添加,感興趣的小伙伴可以了解下
    2025-10-10
  • java之多線程搶火車票的實(shí)現(xiàn)示例

    java之多線程搶火車票的實(shí)現(xiàn)示例

    生活中有很多多線程的案例,購票就是一個(gè)很常見的問題,本文主要介紹了java之多線程搶火車票的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • Maven scala和java混合打包方式

    Maven scala和java混合打包方式

    這篇文章主要介紹了Maven scala和java混合打包方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • RabbitMQ中的Connection和Channel信道詳解

    RabbitMQ中的Connection和Channel信道詳解

    這篇文章主要介紹了RabbitMQ中的Connection和Channel信道詳解,信道是建立在 Connection 之上的虛擬連接,RabbitMQ 處理的每條 AMQP 指令都是通過信道完成的,需要的朋友可以參考下
    2023-08-08

最新評論

东乌珠穆沁旗| 清原| 鄂尔多斯市| 大邑县| 响水县| 香格里拉县| 铜陵市| 紫金县| 莱阳市| 靖江市| 新疆| 铅山县| 永春县| 鄂尔多斯市| 信丰县| 育儿| 宣武区| 赣榆县| 加查县| 长武县| 长春市| 沅江市| 铅山县| 巴马| 灌云县| 临清市| 南丰县| 易门县| 偃师市| 扎赉特旗| 丹棱县| 和静县| 浦北县| 贡嘎县| 玉门市| 班戈县| 宁乡县| 公安县| 图木舒克市| 阿拉尔市| 通榆县|