【Java IO流】IO流詳解

參考筆記:【Java基礎-3】吃透Java IO:字節流、字符流、緩沖流_javaio-CSDN博客


目錄

1.IO流簡介

1.1 什么是IO流?

1.2?IO流的分類

1.3 字符流和字節流的其他區別

1.4?Java IO流體系圖?

2.字符編碼詳解

3.?Java的char類型與 Unicode、UTF-16 的聯系

4.節點流

4.1 字符輸入流/輸出流——FileReader/FileWriter

5.2 字節輸入流/輸出流——FileInputStream/FileOutputStream

5.處理流


1.IO流簡介

1.1 什么是IO流?

IO,即 Input 、?Output ,也就是輸入和輸出,指應用程序和外部設備之間的數據傳遞,常見的外部設備包括磁盤文件、管道、網絡連接

Java 中是通過流處理 IO 的,那么什么是流?

流(Stream),是一個抽象的概念,是指一連串的數據(字符或字節),是以先進先出的方式發送信息的通道

Java 程序需要讀取數據的時候,就會開啟一個通向數據源的流,這個數據源可以是磁盤文件、內存、網絡連接等等。類似地,當 Java 程序需要寫入數據的時候,就會開啟一個通向目的地的流。這時候你就可以想象數據好像在這其中 "流"動 一樣

一般來說關于流的特性有下面幾點:

① 先進先出:最先寫入的數據會被最先讀出

② 順序存取:可以一個接一個地往流中寫入一串字節,讀出時也將按寫入順序讀取一串字節,不能隨機訪問中間的數據

③ 只讀或只寫:每個流只能是輸入流或輸出流的一種,不能同時具備兩個功能,輸入流只能進行讀操作,輸出流只能進行寫操作。在一個數據傳輸通道中,如果既要寫入數據,又要讀取數據,則要分別提供兩個流

1.2?IO流的分類

  • 數據的流向分類:輸入流和輸出流

    • 輸入流 :讀取外部數據(磁盤、光盤等存儲設備的數據)到 Java 程序(內存)中;輸入流以 InputStreamReader 結尾

    • 輸出流 :Java 程序(內存)數據輸出到磁盤、光盤等存儲設備中;輸出流以 OutputStreamWriter 結尾

  • 數據的操作單位分類:字節流和字符流

    • 字節流 以數據單位為 8 位的字節為單位;字節流以 InputStreamOutputStream?結尾

    • 字符流 以數據單元為 16 位的字符為單位;字符流以 ReaderWriter 結尾

  • 流的功能分類:節點流和處理流

    • 節點流:直接操作數據讀寫的流類,比如?FileInputStream

    • 處理流:也稱為包裝流,用來包裝節點流,給節點流提供更加強大的讀寫功能

1.3 字符流和字節流的其他區別

除了操作的數據單位的區別,還有以下區別:

  • 操作的文件類型不同

    • 字符流 :字符流用于處理純文本類型文件,如 .txt、.cpp、.txt、.java、.c、.cpp、.py 等,不能處理圖像、視頻等非文本文件

    • 字節流 :字節流可以操作一切類型文件,但通常用來用來處理 .img、.mp3、.mp4、.ppt、.doc 等二進制文件

  • 緩沖區:

    • 字符流:字符輸出流本身帶有緩沖區(字符輸入流好像沒有),緩沖區是一個長度為 1024char 類型數組

    • 字節流:沒有緩沖區

驗證:字符輸出流帶有緩沖區

查看所有字符輸出流的基類?Writer?,如下:

?可以看到,字符輸出流自帶的緩沖區確實是一個長度為?1024?的?char?類型數組?writeBuffer?

1.4?Java IO流體系圖?

為了更好的閱讀體驗,建議大家對字符編碼、Javachar 類型有比較深的了解

2.字符編碼詳解

? ? ? ? 鏈接如下:

【字符編碼】詳解ASCII、GB2312、GBK、Unicode、UTF-8、UTF-16、UTF-32_gbk解碼-CSDN博客文章瀏覽閱讀966次,點贊27次,收藏22次。相信大家都遇到過打開一個文本文件然后出現亂碼的情況,經典的"錕斤拷"亂碼(bushi),如下:沒在深夜見過"錕斤拷"的人,不足以語人生...好了回歸正題,亂碼到底是怎么來的呢?知名亂碼"錕斤拷"又為何如此常見?不著急,要理解亂碼,首先需要知道計算是如何存儲為文字的:學過計算機的都知道,計算機只能存儲0、1這兩個二進制數,無論是文本文件里的數字、字母、漢字標點符號控制字符emoji😈👴等都需要用某種方式轉換成二進制數字進行存儲,需要的時候再讀出來。_gbk解碼 https://blog.csdn.net/m0_55908255/article/details/147335974?spm=1011.2415.3001.5331????????字符編碼主要內容包括 :?

? ? ? ? ① 字符集、編碼編碼介紹

? ? ? ? ② ASCII字符集 + 編碼

? ? ? ? ③ GB2312字符集 + 編碼

? ? ? ? ④ GBK 字符集 + 編碼

? ? ? ? ⑤ Unicode 字符集

? ? ? ? ⑥ Unicode 字符集的三種編碼方案:UTF-32、UTF-16、UTF-8

? ? ? ? ⑦ 亂碼的本質原因

3.?Java的char類型與 Unicode、UTF-16 的聯系

?? ? ? ? 鏈接如下:

【字符編碼】Java的char類型與Unicode、UTF-16的聯系-CSDN博客文章瀏覽閱讀921次,點贊16次,收藏24次。本文是上一篇博文的續篇:https://blog.csdn.net/m0_55908255/article/details/147335974?sharetype=blogdetail&sharerId=147335974&sharerefer=PC&sharesource=m0_55908255&spm=1011.2480.3001.8118https://blog.csdn.net/m0_55908255/article/details/147335974?sharetype=blogdetail&sh https://blog.csdn.net/m0_55908255/article/details/147430863?spm=1011.2415.3001.5331????????主要內容包括 :?

? ? ? ? ① Java 的 char 類型底層設計

? ? ? ? ② Java 中關于 Unicode 的常用 API

? ? ? ? ③ 編碼和解碼

? ? ? ? ④ 亂碼問題

4.節點流

4.1 字符輸入流/輸出流——FileReader/FileWriter

??? ? ? ? 鏈接如下:

【Java IO流】字符輸入流FileReader、字符輸出流FileWriter-CSDN博客本文講解的是兩個比較重要的節點流,也是兩個比較重要的字符流。即字符輸入流FileReader、字符輸出流FileWriterJava IO作用:將磁盤文本文件的數據讀取到Java程序(內存)中作用:將Java程序(內存)中的字符寫入到磁盤文件中。 https://blog.csdn.net/m0_55908255/article/details/147529309?sharetype=blogdetail&sharerId=147529309&sharerefer=PC&sharesource=m0_55908255&spm=1011.2480.3001.8118? ? ? ? 主要內容包括 :?

? ? ? ? ① FileReader 構造器、常用方法

? ? ? ? ② FileReader 讀取文件案例演示

? ? ? ? ③ FileWriter 構造器、常用方法

? ? ? ? ④ FileWriter 寫入文件案例演示

? ? ? ? ⑤ FileReader + FileWriter 拷貝文本文件

5.2 字節輸入流/輸出流——FileInputStream/FileOutputStream

???? ? ? ? 鏈接如下:

【Java IO流】字節輸入流FileInputStream、字節輸出流FileOutputStream-CSDN博客本文講解的是兩個比較重要的節點流,也是兩個比較重要的字節流。即字節輸入流、字節輸出流Java IO作用:從磁盤文件中讀取字節數據Java程序(內存)中作用:將字節數據 從Java程序(內存) 寫入到磁盤文件。 https://blog.csdn.net/m0_55908255/article/details/147540602?sharetype=blogdetail&sharerId=147540602&sharerefer=PC&sharesource=m0_55908255&spm=1011.2480.3001.8118????????主要內容包括 :?

? ? ? ? ① FileInputStream 構造器、常用方法

? ? ? ? ② FileInputStream 讀取文件案例演示

? ? ? ? ③ FileOutputStream 構造器、常用方法

? ? ? ? ④ FileOutputStream 寫入文件案例演示

? ? ? ? ⑤ FileReader + FileWriter 拷貝文件

5.處理流

此部分講解 3 個處理流:緩沖流轉換流序列化流,再加 標準輸入\輸出流

????? ? ? ? 鏈接如下:

【Java IO流】處理流之緩沖流、轉換流、序列化流、標準輸入\輸出流-CSDN博客文章瀏覽閱讀75次。本文講解的是3個處理流 + 標準輸入\輸出流,內容比較枯燥緩沖字節流:緩沖字符流:BufferedReader、BufferedWriterJava IO節點流可以從一個特定的數據源讀數據或寫數據,比如節點流可以從文件讀取數據到Java程序中,節點流可以將Java程序中的數據寫入文件,這兩個結點流的數據源都是磁盤文件,如下所示:那處理流是什么東西呢?處理流也叫包裝流,是連接(包裝)在節點流之上的流,為節點流提供更為強大的讀寫功能上圖中很形象地描繪了節點流和處理流的關系。 https://blog.csdn.net/m0_55908255/article/details/147543826?spm=1011.2415.3001.5331? ? ? ? 主要內容包括 :?

? ? ? ? ① 緩沖字節流 BufferedInputStram、BufferedOutputStream 的原理、使用案例、與普通字節流的效率對比

? ? ? ? ② 緩沖字符流?BufferedReader、BufferedWriter 的原理、使用案例、與普通字符流的效率對比

? ? ? ? ③ 轉換流 InputStreamReader、OutputStreamWriter 的引入、作用、使用案例

? ? ? ? ④ 序列化流?ObjectInputStream、ObjectOutputStream 的原理、作用、使用案例

? ? ? ? ⑤ 標準輸入\輸出流 System.in 、System.out

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

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

相關文章

驅動開發系列56 - Linux Graphics QXL顯卡驅動代碼分析(三)顯示模式設置

一:概述 如之前介紹,在qxl_pci_probe 中會調用 qxl_modeset_init 來初始化屏幕分辨率和刷新率,本文詳細看下 qxl_modeset_init 的實現過程。即QXL設備的顯示模式設置,是如何配置CRTC,Encoder,Connector 的以及創建和更新幀緩沖區的。 二:qxl_modeset_init 分析 in…

Vue3開發常見性能問題知多少

文章目錄 1 常見性能優化瓶頸及原因1.1 響應式數據的過度使用1.2 虛擬 DOM 的頻繁更新1.3 組件渲染的冗余1.4 大列表渲染的性能問題1.5 計算屬性和偵聽器的濫用1.6 事件處理函數的頻繁綁定1.7 異步組件的加載性能2 解決方案與優化技巧2.1 合理使用響應式數據2.2 優化虛擬 DOM 更…

Rust Ubuntu下編譯生成環境win程序踩坑指南

前言: 1,公司要給一線搞一個升級程序,需要在win下跑。 之前都是找開發總監幫忙,但是他最近比較忙。就讓我自己搞。有了下文.。說來慚愧,之前寫過一篇ubuntu下編譯windows的文章。里面的demo就一句話 fuck world。依賴…

openharmony 4.1 運行busybox工具包(保姆教程)

1.下載 鏈接:Index of /downloads/binaries 進入其中后,找到 挑選適合你系統架構的版本,例如我這邊是 https://busybox.net/downloads/binaries/1.31.0-defconfig-multiarch-musl/busybox-armv7r 右鍵復制鏈接 打開迅雷,直接粘…

算法四 習題 1.3

數組實現棧 #include <iostream> #include <vector> #include <stdexcept> using namespace std;class MyStack { private:vector<int> data; // 用于存儲棧元素的數組public:// 構造函數MyStack() {}// 入棧操作void push(int val) {data.push_back…

GD32F407單片機開發入門(十七)內部RTC實時時鐘及實戰含源碼

文章目錄 一.概要二.RTC基本特點三.GD32單片機RTC內部結構圖四.配置一個RTC走秒例程五.工程源代碼下載六.小結 一.概要 RTC&#xff08;Real-Time Clock&#xff09;是一種用于追蹤和記錄實際時間的時鐘系統。RTC模塊提供了一個包含日期&#xff08;年/月/日&#xff09;和時間…

新能源汽車運動控制器核心芯片選型與優化:MCU、DCDC與CANFD協同設計

摘要&#xff1a;隨著新能源汽車產業的迅猛發展&#xff0c;汽車運動控制器的性能和可靠性面臨著更高的要求。本文深入探討了新能源汽車運動控制器中MCU&#xff08;微控制單元&#xff09;、DCDC電源管理芯片和CANFD總線通信芯片的選型要點、優化策略及其協同設計方案。通過綜…

2.maven 手動安裝 jar包

1.背景 有的時候&#xff0c;maven倉庫無法下載&#xff0c;可以手動安裝。本文以pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar為例。 2.預先準備 下載文件到本地指定位置。 2.1.安裝pom mvn install:install-file \-Dfile/home/wind/tmp/pentaho-aggdesigner-5.1.5-jh…

OpenCV 圖形API(75)圖像與通道拼接函數-----將 4 個單通道圖像矩陣 (GMat) 合并為一個 4 通道的多通道圖像矩陣函數merge4()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 由4個單通道矩陣創建一個4通道矩陣。 該函數將多個矩陣合并為一個單一的多通道矩陣。也就是說&#xff0c;輸出矩陣的每一個元素都是輸入矩陣對…

AI日報 · 2025年05月02日 | 再見GPT-4!OpenAI CEO 確認 GPT-4 已從 ChatGPT 界面正式移除

1、OpenAI CEO 確認 GPT-4 已從 ChatGPT 界面正式移除 在處理 GPT-4o 更新問題的同時&#xff0c;OpenAI CEO Sam Altman 于 5 月 1 日在 X 平臺發文&#xff0c;正式確認初代 GPT-4 模型已從 ChatGPT 主用戶界面中移除。此舉遵循了 OpenAI 此前公布的計劃&#xff0c;即在 4 …

patch命令在代碼管理中的應用

patch 是一個用于將差異文件&#xff08;補丁&#xff09;應用到源代碼的工具&#xff0c;常用于修復 bug、添加功能或調整代碼結構。在您提供的代碼中&#xff0c;patch 命令通過一系列補丁文件&#xff08;.patch&#xff09;修改了 open-amp 庫的源代碼。 patch 命令的核心作…

spring-ai集成langfuse

1、pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.…

PyTorch 與 TensorFlow:深度學習框架的深度剖析與實戰對比

PyTorch 與 TensorFlow&#xff1a;深度學習框架的深度剖析與實戰對比 摘要 &#xff1a;本文深入對比 PyTorch 與 TensorFlow 兩大深度學習框架&#xff0c;從核心架構、優缺點、適用場景等多維度剖析&#xff0c;結合實例講解&#xff0c;幫助開發者清晰理解兩者特性&#x…

如何配置NGINX作為反向代理服務器來緩存后端服務的響應?

大家好&#xff0c;我是鋒哥。今天分享關于【如何配置NGINX作為反向代理服務器來緩存后端服務的響應&#xff1f;】面試題。希望對大家有幫助&#xff1b; 如何配置NGINX作為反向代理服務器來緩存后端服務的響應&#xff1f; 1000道 互聯網大廠Java工程師 精選面試題-Java資源…

DiT:文檔圖像Transformer 的自監督預訓練

摘要 圖像transformer&#xff08;Image Transformer&#xff09;最近在自然圖像理解方面取得了顯著進展&#xff0c; 無論是使用監督&#xff08;ViT、DeiT等&#xff09;還是自監督&#xff08;BEiT、MAE等&#xff09;預訓練技術。在本文中&#xff0c;我們提出了DiT&#…

51c嵌入式~電路~合集4

我自己的原文哦~ https://blog.51cto.com/whaosoft/11888986 一、電流檢測電路 電流檢測的應用 電路檢測電路常用于&#xff1a;高壓短路保護、電機控制、DC/DC換流器、系統功耗管理、二次電池的電流管理、蓄電池管理等電流檢測等場景。電路專輯 對于大部分應用&#xff…

【Git】萬字詳解 Git 的原理與使用(上)

&#x1f970;&#x1f970;&#x1f970;來都來了&#xff0c;不妨點個關注叭&#xff01; &#x1f449;博客主頁&#xff1a;歡迎各位大佬!&#x1f448; 文章目錄 1. 初識 Git1.1 Git 是什么&#xff1f;1.2 為什么要有 Git 2. 安裝 Git2.1 Linux-Ubuntu 安裝 Git2.2 Windo…

【原創開發】無印去水印[特殊字符]短視頻去水印工具[特殊字符]支持一鍵批量解析

支持&#xff1a;快手&#xff0c;抖音&#xff0c;小紅書&#xff0c;嗶哩嗶哩&#xff0c;等多款應用去水印&#xff0c;支持圖集解析下載 【應用名稱】&#xff1a;無印 【應用版本】&#xff1a;1.3 【應用大小】&#xff1a;17M 【測試機型】&#xff1a;小米14 【下載鏈…

qemu(3) -- qemu-arm使用

1. 前言 qemu中有很多的特技&#xff0c;此處記錄下qemu-arm的使用方式&#xff0c;簡單來說qemu-system-xx用于虛擬整個設備&#xff0c;包括操作系統的運行環境&#xff0c;而qemu-xx僅虛擬Linux應用程序的環境&#xff0c;不涉及操作系統&#xff0c;應用程序的系統調用有宿…

Docker的簡單使用(不全)

Docker Hello World Docker 允許在容器內運行應用程序&#xff0c;使用docker run命令來在容器內運行一個應用程序 輸出Hello World runoobrunoob:~$ docker run ubuntu:15.10 /bin/echo "Hello world"Hello world docker&#xff1a;Docker的二進制執行文件 run…