Java_IO流學習

IO流

概念

I – in – 輸入(讀)

O – out – 輸出(寫)

流 – 一點一點的像水流一樣去傳輸數據

注意:站在程序的角度去看待輸入還是輸出

分類

按照方向分流:輸入流、輸出流

按照單位分流:字節流、字符流

按照功能分流:基礎流/節點流、處理流

注意:new 處理流(new 基礎流) – 裝飾者模型 – 處理流對象中往往包含了基礎流的對象,在基礎流的基礎上拓展了額外的功能,使得流更為強大(效率),工作中一般使用處理流

存儲單位

1024byte = 1KB

1024KB = 1MB

1024MB = 1GB

1024GB = 1TB

1024TB = 1PB

注意:進制1024

學習注意事項

  1. 按照流的發展歷史去學習
  2. 注意流與流之間的繼承關系
  3. 舉一反三

字節流

應用場景:操作二進制數據(音頻、視頻、圖片)

abstract class InputStream – 字節輸入流的基類(抽象類)

abstract class OutputStream – 字節輸出流的基類(抽象類)

class FileInputStream extends InputStream – 文件字節輸入流

class FileOutputStream extends OutputStream – 文件字節輸出流

class FilterInputStream extends InputStream – 過濾器字節輸入流

class FilterOutputStream extends OutputStream – 過濾器字節輸出流

class BufferedInputStream extends FilterInputStream – 帶緩沖區的字節輸入流

class BufferedOutputStream extends FilterOutputStream – 帶緩沖區的字節輸出流

默認緩沖區大小:8192字節 - new byte[8192]

字符流

應用場景:操作純文本數據

注意:字符流 = 字節流+編譯器

編譯器:可以識別中文字符和非中文字符,非中文字符獲取1個字節(一個字節=一個字符),編譯器會根據編碼格式獲取中文字符對應的字節數(GBK獲取兩個字節,UTF-8獲取三個字節)

abstract class Reader – 字符輸入流的基類(抽象類)

abstract class Writer – 字符輸出流的基類(抽象類)

class InputStreamReader extends Reader – 字符輸入轉換流

class OutputStreamWriter extends Writer – 字符輸出轉換流

特點:將字節流轉換為字符流,字符轉換流是字節流和字符流的橋梁

class FileReader extends InputStreamReader – 文件字符輸入流

class FileWriter extends OutputStreamWriter – 文件字符輸出流

class BufferedReader extends Reader – 帶緩沖區的字符輸入流

class BufferedWriter extends Writer – 帶緩沖區的字符輸出流

默認緩沖區:8192字符 – new char[8192]

各種流

對象流

class ObjectInputStream – 對象輸入流

class ObjectOutputStream – 對象輸出流

理解:

? 將程序中的對象寫入到文件

? 并且從文件中讀取出對象到程序里

序列化(鈍化):將程序里的對象寫入到文件

反序列化(活化):將文件里的對象讀取到程序中

注意:

  1. 如果對象想寫入文件,對象所屬的類就必須實現序列化接口(Serializable)
  2. Serializable序列化接口沒有任何的屬性和方法,這種接口稱之為標記型接口
  3. 對象所屬的類實現了序列化接口一定要添加序列化ID(serialVersionUID)
  4. 屬性使用transient修飾,該屬性不會隨著對象而寫入到文件中

內存流

class ByteArrayInputStream – 內存輸入流

class ByteArrayOutputStream – 內存輸出流

注意:

  1. 內存流是程序和內存交互,跟文件無關
  2. 內存流是程序到內存的通道,是關閉不掉的

應用場景:項目中頻繁使用的數據可以使用內存流備份一份

打印流

class PrintStream – 字節打印流

class PrintWriter – 字符打印流

注意:打印流實際上就是輸出流,只有一個方向(程序->文件)

PrintStream vs PrintWriter

區別1:PrintStream是以字節為單位,PrintWriter是以字符為單位

區別2:

? PrintStream:將字節流轉換為字節打印流

? PrintWriter:將字節流和字符流轉換為字符打印流

重定向

理解:重新定義系統標準的輸入流、輸出流、錯誤輸出流的方向

System.in:獲取系統標準輸入流的方向(控制臺->程序)
System.out:獲取系統標準輸出流的方向(程序->控制臺)
System.err:獲取系統標準錯誤輸出流的方向(程序->控制臺)

//重定向:重新定義系統標準輸入流的方向(文件->程序)
System.setIn(new FileInputStream(“io.txt”));

//重定向:重新定義系統標準輸出流的方向(程序->文件)
System.setOut(new PrintStream(new FileOutputStream(“io.txt”,true)));

//重定向:重新定義系統標準錯誤輸出流的方向(程序->文件)
System.setErr(new PrintStream(new FileOutputStream(“io.txt”,true)));

隨機訪問流

class RandomAccessFile

理解:該流認為文件是一個大型的byte數組。有一個隱藏的指針(默認為0),其實就是下標,可以從指針的位置寫入或讀取,意味著該流兩個方向

模式:r-讀,rw-讀寫

提升作業:

流的大類:BIO、NIO、AIO

學習NIO和AIO,制作md文檔,其中包含概念、理解和代碼

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

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

相關文章

R語言:單細胞pcoa降維和去批次

#生成隨機顏色 > randomColor <- function() { paste0("#",paste0(sample(c(0:9, letters[1:6]), 6, replace TRUE),collapse "")) } # 生成100個隨機顏色 > randomColors <- replicate(100,randomColor()) > seuratreadRDS("seu…

RAG系統(四)手撕基于向量檢索的 RAG

RAG系統&#xff08;一&#xff09;系統介紹與向量檢索 RAG系統&#xff08;二&#xff09;文檔的加載與分段 RAG系統&#xff08;三&#xff09;向量數據庫 完整代碼需要依賴前邊三章中的代碼&#xff0c;本節主要展示整合后的RAG系統&#xff0c;及運行示例。 from MyVec…

前端javascript包管理,npm升級用pnpm

一 pnpm 介紹 pnpm&#xff08;Package Manager&#xff09;是一個快速、節省磁盤空間的 JavaScript 包管理器&#xff0c;它是 Node.js 生態系統中 npm 的一個替代品。pnpm 解決了傳統包管理工具在處理依賴時的一些痛點&#xff0c;特別是關于存儲空間使用和依賴地獄的問題。…

如何將Google Search Console添加到WordPress和GA4

您想知道如何將 Google Search Console 添加到您的 Google Analytics 帳戶和 WordPress 網站嗎&#xff1f; 作為網站主&#xff0c;Google Search Console 是一款不能不使用的工具。對于任何想要確保其網站在 Google 搜索結果中表現良好的人來說&#xff0c;這絕對是一個必不…

leetCode-hot100-數組專題之區間問題

數組專題之區間問題 知識點&#xff1a;解決思路&#xff1a;例題56.合并區間57.插入區間253.會議室 Ⅱ485.無重疊區間 數組區間問題是算法中常見的一類問題&#xff0c;它們通常涉及對數組中的區間進行排序、合并、插入或刪除操作。無論是合并區間、插入區間還是刪除重復空間&…

【HarmonyOS嘗鮮課】- 下載、安裝DevEco Studio以及配置環境、創建運行HarmonyOS項目

下載、安裝開發工具 進入DevEco Studio下載官網&#xff0c;單擊“立即下載”進入下載頁面。 這里以Windows為例進行安裝&#xff0c;可以根據操作系統選擇對應的版本進行下載。 下載完成后解壓一下&#xff0c;進入文件里&#xff0c;雙擊應用程序&#xff0c;打開安裝向導&a…

Redis主從、哨兵、集群講解

一、Redis主從 大家在面試中可能經常會被問到Redis的高可用問題。Redis高可用回答包括兩個層面&#xff0c;一個就是數據不能丟失&#xff0c;或者說盡量減少丟失 ;另外一個就是保證Redis服務不中斷 。 對于盡量減少數據丟失&#xff0c;可以通過AOF和RDB保證。 對于保證服務…

2024年中青杯數學建模思路+建模過程+視頻講解

A 題&#xff1a;人工智能視域下養老輔助系統的構建 隨著全球人口老齡化的加劇&#xff0c;養老問題已經成為一個世界性的社會問題。它不僅 關系到每個家庭、每個個體的未來福祉&#xff0c;也關系到國家的社會穩定和可持續發展。根 據聯合國的相關數據顯示&#xff0c;全球 65…

linux---線程控制

線程和進程 以前我們要同時跑多個程序&#xff0c;可以通過fork()多個子進程&#xff0c;然后通過系統函數進行程序的替換&#xff0c;但是創建進程代價大&#xff0c;不僅要拷貝一份父進程的地址空間&#xff0c;頁表&#xff0c;文件表述符表等。但是線程不需要因為是進程的…

搜索引擎新特性與未來展望

多元化大模型支持: 本搜索引擎具備卓越的兼容性和靈活性,支持多種大模型(LLMs)。無論是本地部署的llama3、gemma、mistral等模型,還是云服務提供的OpenAI/gpt4-o、Groq/Llama3等,都能輕松接入,為用戶提供豐富的智能搜索體驗。現代化技術棧構建: 項目采用業界領先的Next…

windows docker desktop 更換鏡像存儲目錄

windows docker desktop 更換鏡像存儲目錄 方法&#xff1a;如圖&#xff0c;Browse瀏覽一個新的目錄并選中&#xff0c;確定后&#xff0c;程序會開始stop&#xff0c;在stop完成前&#xff0c;會持續遷移原有鏡像到新的位置&#xff0c;你會發現目標位置的磁盤占用空間越來越…

Mac網線連接windows本【局域網互傳文件】

Mac網線連接windows本【局域網互傳文件】 兩臺電腦網線互聯 Mac->網絡->USP TCP/IP 手動配置IP&#xff0c;子網掩碼&#xff0c;路由器 windows 網絡和Internet配置->更改適配器選項->以太網->Internet協議版本4&#xff08;TCP/IPv4&#xff09;->屬性 …

K8S/ hpa分享

在 Kubernetes 中&#xff0c;HorizontalPodAutoscaler 自動更新工作負載資源 &#xff08;例如 Deployment 或者 StatefulSet&#xff09;&#xff0c; 目的是自動擴縮工作負載以滿足需求。 hpa的使用本身還是很簡單的 示例如下&#xff1a; 官網示例 apiVersion: apps/v1 k…

NetCore發布的時候怎么去除生成的多余的語言文件夾cs,de...,Microsoft.CodeAnalysis語言資源文件

1、問題&#xff1a; .NetCore 3.1 發布出來的publish目錄一大堆雜七雜八的文件夾如下圖&#xff1a; 2、產生原因 由Microsoft.VisualStudio.Web.CodeGeneration.Design包導致 3、解決方法&#xff1a; 如果確實需要某種語言資源文件&#xff0c;可以這樣&#xff0c;右鍵編…

壓擺率SR、增益帶寬積GBP、開環增益Aol

運放的選型對運放電路的實際效果非常關鍵&#xff0c;一定要理解運放重要參數的概念。下面幾天將對運放的選型進行系統學習并做實驗 運放的壓擺率&#xff08;Slew Rate&#xff0c;簡稱SR&#xff09;是指閉環放大器在輸入為階躍信號時&#xff0c;輸出電壓時間變化率的平均值…

vue打包部署到springboot,通過tomcat運行

tomcat默認端口 8080springboot端口 9132vue 端口 9131 框架 項目是基于SpringBootVue前后端分離的倉庫管理系統 后端&#xff1a;SpringBoot MybatisPlus前端&#xff1a;Node.js Vue element-ui數據庫&#xff1a;mysql 一. 打包Vue項目 cmd中輸入命令 npm run build 后…

深度學習之基于YoloV5-Deepsort人物識別與追蹤項目

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景與目標 本項目旨在利用深度學習技術&#xff0c;結合YoloV5和Deepsort算法&#xff0c;開發一個高效、…

前端:音頻可視化(H5+js版本)

一、效果展示 HTML5JS實現一個簡單的音頻可視化 二、代碼 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>音頻可視化</title><style></style></head><body><divs…

非平穩信號的傅里葉變換與短時傅里葉變換

一、仿真一個非平穩的時間序列。 N 10000; t 0:N-1; z1 4.2*sin(2*pi/20.*t5); z2 2.2*sin(2*pi/100.*(10.001*t).*t8); w1 randn(length(t),1); yz1z2w1; figure;plot(y,LineWidth,1.5);grid on; ylabel(Signal); xlabel(Time); 二、傅里葉變換&#xff08;FFT&#xff…

教育智能化的歷史及發展趨勢

1. 教育智能化概述 1.1 定義與背景 教育智能化是指利用人工智能、大數據、云計算等現代信息技術&#xff0c;對教育過程進行智能化改造&#xff0c;提升教育質量與效率。隨著技術進步&#xff0c;教育智能化已成為全球教育改革的重要趨勢。 教育智能化的背景可以追溯到20世紀…