JAVA:IO流之字節輸入流InputStream基礎

? ? ? ? 我們知道,文件是寫在磁盤中的,而程序的運行又要借助于內存。那么怎么實現內存和磁盤的“互動”呢?這就要借助“流”來實現了。

? ? ? ? 內存具體指的就是我們的java程序,而磁盤具體指的是我們的文件。從磁盤到內存叫輸入,從內存到磁盤叫輸出

? ? ? ? 流就相當于一位“外賣小哥”,在內存和磁盤之間來回穿行,攜帶數據。流有以下幾種分類:

?字節流字符流
輸入流InputStreamReader
輸出流OutputStreamWriter

? ? ? ? 如果按照流的角色,還可以分為節點流,處理流/包裝流。今天我們要講的是字節流中的輸入流。

? ? ? ? 字節流適用于所有類型數據,因為它是對數據最底層的操作,直接以字節為單位進行讀寫的。我們在d盤里創建一個Test97.txt文件并在其中寫入“Hello,world”。

? ? ? ? 我們創建一個文件輸入流FileInputStream對象,將文件路徑放到其中去,我們的目的是讀取到文件中的數據:

String FilePath = "d:\\Test97.txt";
FileInputStream fileInputStream0 = new FileInputStream(FilePath);

? ? ? ? 我這里創建了一個ArrayList數組list存儲數據,并使用read()方法讀取數據。注意,read方法一次只能讀取一個字節的數據,并且返回值為int類型。當讀取完畢時,會返回值-1。

//接收數據
ArrayList<Character>list = new ArrayList<>();
int read0 = 0;
while((read0 = (fileInputStream0.read())) != -1) {list.add((char)read0);
}

? ? ? ? 創建好一個Character類型的數組,再將接受到的數據進行強制類型轉換,放進數組中。

? ? ? ? 這里為什么我要用read0來接收數據呢?因為如果直接使用fileInputStream0.read()!=-1方法來判斷是否接受完畢,再使用list.add((char)fileInputStream0.read());接收數據,實際上總共接受了兩次數據,會導致接收的數據錯誤。

? ? ? ? 最后需要關閉文件流,釋放資源:

fileInputStream0.close();

? ? ? ? 可以遍歷查看數組中的元素是否為我們想要的內容。

? ? ? ? read還提供了一種常用的構造方法:read(byte[] b),在read里傳入一個byte類型的數組,將文件內容讀取到byte類型數組中去,增強了文件讀取效率。

? ? ? ? 這里我們創建另一個FileInputStream對象,并創建一個長度為5的byte類型數組來接受數據:

String FilePath = "d:\\Test97.txt";
FileInputStream fileInputStream1 = new FileInputStream(FilePath);
//創建接受的byte數組
byte[] b = new byte[5];

? ? ? ? 這里要注意了,讀取文件內容的長度最多不超過b.length個字節。超出的字節可以被下一次讀取到,但同樣不超過b.length個字節。

? ? ? ? 如果read(byte[] b)方法讀取正常,會返回實際讀取字節數。

//直接讀取
fileInputStream1.read(b);
//釋放資源
fileInputStream1.close();

? ? ? ? 同樣可以遍歷b數組并強制類型轉換來查看是否導入成功:

//轉成char類型
for(byte i:b) {System.out.print((char)i);
}

? ? ? ? 好了,字節輸入流就講到這里,下次我們聊一聊字節輸出流。

? ? ? ??

????????

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/96024.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/96024.shtml
英文地址,請注明出處:http://en.pswp.cn/web/96024.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

23種設計模式——橋接模式 (Bridge Pattern)詳解

?作者簡介&#xff1a;大家好&#xff0c;我是 Meteors., 向往著更加簡潔高效的代碼寫法與編程方式&#xff0c;持續分享Java技術內容。 &#x1f34e;個人主頁&#xff1a;Meteors.的博客 &#x1f49e;當前專欄&#xff1a;設計模式 ?特色專欄&#xff1a;知識分享 &#x…

Python爬蟲實戰:研究Axes Grid模塊,構建旅游平臺酒店數據采集和分析系統

1. 引言 1.1 研究背景 隨著互聯網技術的飛速發展,全球數據總量呈現指數級增長。據國際數據公司(IDC)預測,到 2025 年全球數據圈將達到 175ZB,其中非結構化數據占比超過 80%。這些數據廣泛分布于各類網站平臺,包含著用戶行為、市場趨勢、產品特征等豐富信息。如何高效獲…

光照邊疆平臺|面向邊疆地區的現代化內容與信息服務系統

光照邊疆平臺&#xff5c;面向邊疆地區的現代化內容與信息服務系統聚焦“邊疆資訊 邊疆風光 用戶互動 后臺可視化管控”的高顏值內容平臺&#xff0c;適合展示、傳播與運營邊疆主題內容。系統定位與價值 主題聚焦&#xff1a;以“邊疆”為核心&#xff0c;統一內容語義與視覺…

刪除元素(不是刪除而是覆蓋)快慢指針 慢指針是覆蓋位置,快指針找元素

&#x1f4dd; 題目&#xff1a;移除元素題目描述&#xff1a; 給定數組和值val&#xff0c;原地移除所有等于val的元素&#xff0c;返回新長度。例子&#xff1a; nums [3,2,2,3], val 3 → nums [2,2,_,_], return 2&#x1f525; 暴力法思路&#xff1a;暴力法想法&#…

10 【C++】泛型編程

文章目錄前言泛型編程&#xff08;模板&#xff09;1. 函數模板1.1 函數模板格式1.2 函數模板的實例化隱式實例化顯式指定模板參數實例化1.3 函數模板實例化的原理1.4 模板參數的匹配原則2. 類模板2.1 類模板的格式2.2 類模板的實例化2.3 類模板實例化的原理2.4 類模板的匹配原…

【基于YOLO和Web的交通工具識別系統】

系統功能 視頻檢測&#xff1a;對輸入的視頻流進行實時或離線分析&#xff0c;自動識別視頻中出現的交通工具&#xff08;如飛機、自行車等&#xff09;及行人&#xff0c;輸出包含目標類別、位置等信息的檢測結果。攝像檢測&#xff1a;通過連接攝像頭設備&#xff0c;對實時…

Python進程,線程

目錄 一、多任務 1.1定義 1.2具體體現 1.3并發和并行 1.3.1并發操作 1.3.2并行操作 1.3.3對比 二、進程 2.1概念 2.2特點 2.3進程狀態 2.4多進程 2.5多進程實現 2.6進程鎖 三、線程 3.1概念 3.2特點 3.3適用場景 3.4多線程實現 四、對比 4.1關系對? 4.2區…

【Element Plus 表單組件樣式統一 CSS 文字特效實現指南】

Element Plus 表單組件樣式統一 & CSS 文字特效實現指南 前言 在使用 Element Plus 組件庫開發表單頁面時&#xff0c;我們遇到了一個看似簡單卻很有趣的問題&#xff1a;el-input、el-select 和 el-textarea 在禁用狀態下的文字顏色不一致。通過深入研究&#xff0c;我們…

網絡通信與協議棧 -- OSI,TCP/IP模型,協議族,UDP編程

網絡通信的核心是實現不同主機上進程間的數據交換&#xff0c;其技術體系圍繞 “協議分層模型” 展開&#xff0c;向下依賴硬件介質傳輸電 / 光信號&#xff0c;向上支撐各類網絡應用&#xff08;如網頁瀏覽、文件傳輸&#xff09;。本文結合 OSI 理論框架與 TCP/IP 工業標準&a…

HarmonyOS 新一代聲明式 UI 彈窗機制:從 AlertDialog 到 CustomDialogController 的深度解析與實踐

好的&#xff0c;請看這篇關于 HarmonyOS 新一代聲明式 UI 彈窗機制的技術文章。 HarmonyOS 新一代聲明式 UI 彈窗機制&#xff1a;從 AlertDialog 到 CustomDialogController 的深度解析與實踐 引言 在 HarmonyOS 應用開發中&#xff0c;彈窗&#xff08;Dialog&#xff09;是…

混合推理模型(快思考、慢思考模型)

目錄基礎transformer架構、transformers庫預訓練模型的微調&#xff08;Fine-tuning&#xff09;預訓練微調的大模型應用模式base 模型、instruct 模型區別Hugging Face 上如何查看base模型、instruct模型混合推理模型大模型里的快思考 vs 慢思考qwen3模型含特殊 ChatML / 模型…

prometheus+grafana搭建

部署 prometheus 安裝 # 1,下載 wget https://github.com/prometheus/prometheus/releases/download/v2.45.1/prometheus-3.5.0.linux-amd64.tar.gz# 2,部署 tar -zxvf prometheus-3.5.0.linux-amd64.tar.gz -C /opt/ cd /opt/ mv ./prometheus-3.5.0.linux-amd64 …

MR30分布式I/O在面機裝備中的應用

隨著食品加工行業向自動化、智能化轉型&#xff0c;面機裝備對控制系統的響應速度、布線靈活性及穩定性提出了更高要求。本案例以某大型食品機械制造企業的全自動面條生產線升級項目為背景&#xff0c;引入 MR30 分布式 IO 模塊替代傳統集中式 IO 方案。通過將 MR30 分布式 IO …

Matlab使用小技巧合集(系列四):Table類型高效用法與數據處理實戰

Matlab使用小技巧合集(系列四):Table類型高效用法與數據處理實戰 在科研數據處理和論文寫作過程中,結構化數據的管理極為重要。Matlab的table類型為研究生和科研人員提供了靈活、高效的數據存儲與處理方式,尤其適合實驗結果整理、分組統計、數據預處理等場景。本文將系統介…

STM32的時鐘系統與時鐘樹的配置

STM32的時鐘系統是其微控制器&#xff08;MCU&#xff09;的核心組成部分&#xff0c;負責為CPU、外設和存儲器等模塊提供精確的時序信號。其設計靈活且復雜&#xff0c;通過多級時鐘樹&#xff08;Clock Tree&#xff09;實現時鐘源的選擇、分頻和分配。以下是詳細介紹&#x…

NV 工具metrics分析(ncu, nsys/torch profiler)

以下分析都以A100硬件架構為例; Theoretical Max Active Warps per SM: 64 Register number: 512 (規定每個thread不能超過256) Theoretical Active Warps per SM [warp]&#xff1a;512//registers_per_thread*4, which defines theoretical active warp occupancy Waves P…

[CISCN2019 總決賽 Day2 Web1]Easyweb

登錄界面可以看到隨機切換的圖片。從頁面源碼中可以看到<div class"avtar"><img src"image.php?id3" width"200" height"200"/></div>&#xff0c;圖片文件的請求地址&#xff0c;并且有傳參id。web應用中像這種動…

第 3 講:KAFKA生產者(Producer)詳解

這是一篇既照顧入門也能給高級工程師提供落地經驗的實戰筆記。0. TL;DR&#xff08;先上結論&#xff09; 想穩&#xff1a;acksall 合理 retries&#xff1b;需要“分區內不重不丟”→ 再加 enable.idempotencetrue 且 max.in.flight<5。想快&#xff1a;適度增大 batch.s…

微信小程序截屏與錄屏功能詳解

微信小程序提供了豐富的API支持截屏和錄屏功能&#xff0c;適用于多種場景&#xff0c;如教育類應用的課程錄制、游戲類應用的精彩瞬間分享、電商類應用的商品展示等。以下將詳細介紹實現方法和應用案例。 截屏功能實現 截屏功能通過調用wx.canvasToTempFilePath或wx.captureSc…

React 中的 HOC 和 Hooks

寫在前面 在函數式組件主導的 React 項目中&#xff0c;高階組件&#xff08;HOC&#xff09;并非首選推薦&#xff0c;更建議優先使用 Hooks來實現復用邏輯。核心原因是 HOC 存在固有的設計缺陷&#xff0c;而 Hooks 能更優雅、簡潔地解決相同問題&#xff0c;同時避免 HOC 的…