兩分鐘時間:給你講解什麼叫IO流?

2020-12-11 劉小愛

今天是我自學Java的第40天。

感謝你的觀看,謝謝你。

話不多說,開始今天的學習:

一、IO流概述

說到IO流,先得提一提電腦的基本概念:

CPU:中央處理器,處理速度最快。memory:內存,臨時性存儲設備,處理速度次之,但數據不保存。disk:硬碟,持久性存儲設備,處理速度最慢,但數據永久保存。什麼叫IO流?

IO流,就是指讀寫文件的技術。

1.input

I就是指input:輸入的意思,這是輸入流。

意思是將硬碟裡的數據輸入到內存裡,也就是讀取文件。

2.output

O指output:輸出的意思,這是輸出流。

意思是將內存中的數據輸出到硬碟上,也就是寫入文件。

用一句話記憶就是:輸入到內存(讀取硬碟),從內存輸出(寫入硬碟)

舉一個例子:

我們在記事本上寫東西,寫完後保存,保存的過程就是寫入文件的過程。

不保存:數據是在內存裡面,退出後數據會消失;保存:數據會被寫到硬碟上,退出後數據也會保存。其中根據數據的類型IO流又分為:

字節流:以字節為單位讀寫數據的流,能夠操作所有文件

字節輸入流: InputStream字節輸出流: OutputStream字符流 :以字符為單位讀寫數據的流,用於操作文本文件

字符輸入流: Reader字符輸出流: Writer今天主要學習字節流:

二、OutputStream輸出流

它是輸出流最上層的父類,是一個抽象類,其中它有一個子類叫FileOutputStream。

1.構造方法(一)

先介紹其兩個構造方法:

①構造方法一:路徑存在

FileOutputStream(String name)。

根據文件路徑輸出文件,「a.txt」是一個相對路徑,所以是輸出在當前項目下。

②構造方法一:路徑不存在

「aa/a.txt」因為其父路徑不存在,所以會報錯。

③構造方法二

FileOutputStream(File file)。

一般都是使用構造方法一,簡單方法,只要輸入路徑就好了,但是會出現②中的這種情況。

而構造方法二就是解決這類問題的。

可以先在file中加一個判斷,父路徑不存在就先創建目錄,再創建輸出流。

2.常用方法

①write(int b)方法

這個方法表示是一個字節一個字節地寫。

按照ASCII碼錶編碼,97就對應a,98就對應b,99就對應c。

所以①的操作會在文件裡寫入abc。

②write(byte[] b)方法

這是先寫一個byte數組,在寫入文件。

也是按照ASCII碼錶編碼。

③write(byte[] b, int off, int len)

off表示的是偏移量

len表示的是長度

也就是說寫入文件的數組,是從b數組中off索引位開始,2個長度。

④close()方法

關流,節省資源。就可以將其理解成關閉水龍頭。

所以在a.txt文件中會寫入:abcabcbc。

3.構造方法(二)

我們新創建一個輸出流,操作同一個文件,寫入一個數組,會將文件中的內容覆蓋掉。

a.txt文件裡的內容從abcabcbc變成了劉小愛。

但若是我不是想覆蓋而是續寫在後面該怎麼辦?

構造方法三:

FileOutputStream(String name,boolean append)

append,附加的意思,默認值為false。

如果append為true的話,會拼接到文件後面;如果append為false的話,就會覆蓋。

①直接輸入換行符

不同的作業系統有著不同的換行符

Windows 系統識別的換行符:\r\nUnix 系統識別的換行符:\nMacOs/Linux系統識別的換行符:\r②System方法輸入換行符

System.lineSeparator():該方法會根據系統的不同而輸入不同的換行符。

二、InputStream輸入流

它是輸入流最上層的父類,是一個抽象類,其中它有一個子類叫FileInputStream。

1.read方法基本用法

①創建輸入流

如果文件不存在,輸入流會直接報錯。

②read()方法

輸入流的讀操作。

返回值即為讀取的字符,一次只能讀取一個;如果讀到了文件末尾,返回值為-1。③使用while循環

一次讀取所有內容,當返回值為-1時結束循環。

2.read方法(利用buffer讀取文件)

這個稍稍有點難理解,我們一步一步分析:

①創建一個輸入流

其中文件裡的內容為abcdefgh.

創建buffer數組,長度為3,(buffer為緩存的意思)

②第一次讀數據

將讀到的數據放入buffer中,並返回讀到的長度。

因為buffer的長度為3,所以每次讀取讀3個字節。

所以讀到的是abc,長度為3。

③第二次讀數據

讀到的是def,長度為3。

buffer中def將abc覆蓋掉了,所以列印def。

④第三次讀數據

文件中只有最後兩個字節了,

所以讀到的是gh,長度為2

buffer中只覆蓋了前兩個字節,後面的第3個字節保持不變(gh將def覆蓋得到ghf),所以列印ghf。

⑤第四次讀數據

因為都讀完了,根本就沒有讀文件,所以返回值為-1(注意不為0哦)

buffer沒有改變,所以還是列印ghf。

以上就是利用buffer數組讀取文件時的工作原理。

但這樣太繁瑣了,有沒有簡單的方法?

有的,使用while循環就好了。

3.read方法(利用buffer讀取文件while循環)

①使用while循環

當length不為-1時,一直循環執行read操作;

當length為-1時,表示文件讀到了最後,所以結束循環。

②使用字符串偏移

最後一次的字符串長度我們只需要讀取到的數據,也就是ghf只需要gh即可。

總結

相關焦點

  • IO流之字符緩衝流BufferedWriter和BufferedReader
    今天我們來學習一下字符緩衝流BufferedWriter和BufferedReader學習目標BufferedWriter_字符緩衝輸出流的使用方法>BufferedWriter 繼承了Writer(java.io.BufferedWriter extends Writer )BufferedWriter 有兩個構造方法:BufferedWriter(Writer out) 創建一個使用默認大小輸出緩衝區的緩衝字符輸出流。
  • Java【IO系列】基礎篇—1. IO框架
    當時學習的節奏是,首先了解io的相關介紹,再查看io的使用示例,最後才是打開API參考文檔並參考文檔通過寫demo來學習。結果,當時是了解了API的使用方法;可是一段時間之後,只能零零碎碎的記得一些片段,再要自己講出個所以然來,已經非常之艱難。之所以造成這種困境,我想主要是:一,學習的時候,理解的不夠徹底,沒有真正理解它的思想和框架。二,加之後來使用的較少,加速了遺忘的速度。
  • 「GCTT 出品」對 Go 中長時間運行 io.Reader 和 io.Writer 的操作...
    首發於:https://studygolang.com/articles/12547每當我們在使用類似 io.Copy 和 ioutil.ReadAll 的工具時,比如我們正在從 http.Response 主體讀入或者上傳一個文件,我們會發現這些方法將一直堵塞,直到整個過程完成,哪怕耗時數十分鐘甚至是小時——而且我們沒有辦法來查看進度
  • 夯實Java基礎系列16:一文讀懂Java IO流和常見面試題
    )]什麼是Java IO流Java IO流是既可以從中讀取,也可以寫入到其中的數據流。除了DataInputStream 和DataOutputStream 還能夠讀寫int, long, float和double類型的值以外,其他流在一個操作時間內只能讀取或者寫入一個原始字節。字符流通常以「Reader」或者「Writer」命名。字符流能夠讀寫字符(比如Latin1或者Unicode字符)。
  • 套兩個手機的自拍杆,有什麼用?| MindStore.io 日榜
    套兩個手機的自拍杆,有什麼用?| MindStore.io 日榜 MindStore.io 是一個發現、分享、探討新酷產品的社區,幫助你找到最好的產品和想法。
  • 在程序中如何正確地創建和銷毀軟體應用系統中文件IO流對象實例
    如下示圖中的程序代碼片段示例體現了Java語言中的IO流編程應用中所需要遵守的基本規則。3、JDK系統庫提供有java.io和java.nio兩種不同的系統程序包如下示圖為JDK系統庫幫助文檔中對Java的核心庫java.io包的功能說明局部截圖。
  • 專注全球工作流自動化市場的Tray.io獲5000萬美元融資
    軟體測試和大數據公司進行的一項研究發現,大約10%至20%的工作時間花費在乏味的重複性任務上,並且企業平均錯失了所有自動化機會的一半。    Richard Waldron,Alistair Russell和Dominic Lewis。這三位企業家於2012年啟動了Tray.io,其目標是使企業能夠使用可視化工具和豐富的API來構建和維護集成。
  • 《Agar.io》的成功可以複製?《Slither.io》和其他「追隨者們」
    一旦碰到別的貪吃蛇,遊戲失敗,你所控制的貪吃蛇就將成為其他貪吃蛇的餌料。遊戲的積分規則也非常簡單,吞食更多的顆粒將獲得更多的分數,當然,同時你控制的貪食蛇也會變長,躲避其他玩家將會更困難。這款遊戲是由Steve Howse開發,於今年早先時間發布,最早登陸的是網頁端和iOS,三月份又在Android上架。
  • 那些吃盡萬物的io遊戲,到底是什麼 樣的吃貨遊戲?
    小爆哥每天都在思考一個問題——晚上吃什麼???不吃減肥,不可能!那就點份炸雞吧,我真的就吃那麼點!每次吃東西的我,都還想io遊戲的角色,根本聽不下來,那小爆哥就和大家聊聊io遊戲這個小吃貨!如果要說遊戲史上最著名的吃貨遊戲是什麼?
  • 既《Agar.io》與《Slither.io》之後,又現《Paper.io》
    導 讀 既《Agar.io》與《Slither.io》之後,美國手遊市場又現《Paper.io》。
  • 「最美應用」slither.io:讓 io 遊戲成為潮流的遊戲
    io 遊戲,是在有限制的地圖上,展開的多人對抗可立即復活,並有多變性和操作性的一類簡單成長體系網路遊戲的簡稱。蛇蛇大作戰(slither.io)(以下稱蛇蛇大作戰)是一款多人對抗 + 地圖限制 + 死後即刻復活的 io 遊戲,就好像近年來興起的貪吃蛇和球球大作戰一樣的玩法,你需要不斷的與線上其他玩家對抗,並取得勝利,來擴充你自己。可以這麼說吧,它是貪吃蛇大作戰這款遊戲的前身。畫面雖然沒有貪吃蛇大作戰這麼美觀(PS.僅個人觀點),走的是和貪吃蛇大作戰相反的色系,純黑版。
  • ShowOff.io讓你的朋友馬上試用你正在開發中的網站
    ShowOff.io讓你的朋友馬上試用你正在開發中的網站 你是否有過這樣的經驗?多虧了科技持續在進步、而且始終來自於人性,現在想要炫耀你的好作品有了更簡單的管道:showoff.io。
  • 從米其林廚師、性心理教育者到Gate.io高管 Tina告訴你百變人生...
    但你有見過集美國五星級酒店西餐廚師、持證心理諮詢師、交易所高管三重身份於一身的從業者嗎? Gate.io芝麻開門亞太區副總裁Tina,就是這樣一個全面跨界的人。自2017年底加入Gate.io以來,Tina全面負責海外市場的調研、設點和運營推廣,從0到1建立起Gate.io韓國、越南、新加坡等5個海外市場。
  • io遊戲一年簡史:勝者和英雄
    儘管io遊戲歷史短暫,但儼然已成為遊戲業一股不容忽視的力量,《Diep.io》《Slither.io》《Wings.io》《Massivematch.io》……在一年時間裡,數不盡的後繼者湧現,其中不乏優秀之作,同時湧現的,還有大量山寨作品。你也許還不知道,當下處於中國App Store免費榜第一位的《貪吃蛇大作戰》就是《Slither.io》的山寨劣化作品。
  • 基礎知識講解:什麼是feed流?
    feed流即持續更新並呈現給用戶內容的信息流。最近常聽朋友說中了抖音的毒,一有時間就刷抖音,根本停不下來。刷朋友圈、逛微博,以及現在很火的短視頻,我們每天有大量時間消耗在「feed流」中,並且刷的不亦樂乎。跟同行交流或看相關的產品文章,也經常會提到「feed流」。
  • Greenplum的流數據加載
    從圖中可以看出,價值衰減最快的是「戰術」型決策的數據,它的特點是需要幾乎實時(以分鐘,甚至秒為單位)的做出決策,例如根據交通狀況規劃路線等。數據時效性最常見的影響是,如果捕獲到的數據無法得到及時的利用,數據的價值會迅速衰減從而只能被拋棄。如何第一時間「榨取」數據的最大價值,成為今天流數據處理的一個重要問題。
  • OneNote日程管理—什麼是時間流和任務流?
    那,回到日程管理這個基本需求上,有什麼流派呢? 我自己總結了下,一般而言,就是兩個基本派別,即「時間流」和「任務流」。 什麼是時間流?就是以限定時間為導向,明確時間約束。 什麼是任務流?就是以限定任務為導向,強調任務執行。  考試就是典型的時間流,一場考試結束,即便你沒有寫完題目,也要交卷了。而科學研究就是偏向任務流,對於基礎科學,甚至是模糊任務流,因為很難限定時間,經常需要在一段不知道還要耗費多久的時間裡默默前進。
  • 計算機中的IO字符流
    天下的「流」都一樣!只要是涉及到流的概念!都會想到舟行碧波上,人在畫中遊的場景。計算機中按照流的概念主要分為:輸入流和輸出流。上一文章了解到字節流。現在來了解一下字符流。除了字節流和字符流之外,還有以下幾個流:轉換流,緩衝流,標準輸入輸出流,數據流等。字符流一次只處理一個字符,根據流向可分為字符輸入流和字符輸出流。仔細看一下。字節流和字符流處理的數據是有區別的!一個一次處理一個字節,另一個是一次處理一個字符。
  • 《father.io》遊戲什麼職業好玩 新手玩法攻略大全
    father.io遊戲職業有哪些?father.io遊戲什麼職業好玩?father.io遊戲職業怎麼樣?father.io遊戲職業介紹詳解、一起看看!father.io遊戲職業民兵:擁有可靠的槍,固體裝甲和較高的戰術靈活性。全都是關於戰鬥的戰略能力。滲透者:刺探敵人,收集與破壞他們的網絡。避免全副武裝的職業。
  • Bumper.io中文版下載
    這是一款非常有意思的io競技手遊,最近在抖音上很火,各種可愛的球球之間展開io競技大作戰,多名玩家在線競技,十分魔性有趣! Bumper.io中文版下載玩法特別有趣,快來下載吧! 在遊戲之中,玩家們需要用你的保險槓把運動員從舞臺上擊倒。