1. 程式人生 > >[零] JavaIO入門簡介 程式設計語言 為什麼需要IO庫

[零] JavaIO入門簡介 程式設計語言 為什麼需要IO庫

(1)  建立檔案。 在建立一個新檔案時,系統首先要為新檔案分配必要的外存空間,並在檔案系統的目錄中,為之建立一個目錄項。 目錄項中應記錄新檔案的檔名及其在外存的地址等屬性。
(2)  刪除檔案。 當已不再需要某檔案時,可將它從檔案系統中刪除。在刪除時,系統應先從目錄中找到要刪除檔案的目錄項,使之成為空項,然後回收該檔案所佔用的儲存空間。 
(3)  讀檔案。 在讀一個檔案時,須在相應系統呼叫中給出檔名和應讀入的記憶體目標地址。此時,系統同樣要查詢目錄,找到指定的目錄項,從中得到被讀檔案在外存中的位置。在目錄項中,還有一個指標用於對檔案的讀/寫。
(4)  寫檔案。 在寫一個檔案時,須在相應系統呼叫中給出該檔名及該檔案在記憶體中的(源)地址。 為此,也同樣須先查詢目錄,找到指定檔案的目錄項,再利用目錄中的寫指標進行寫操作。
(5)  截斷檔案。 如果一個檔案的內容已經陳舊而需要全部更新時,一種方法是將此檔案刪除,再重新建立一個新檔案。 但如果檔名及其屬性均無改變時,則可採取另一種所謂的截斷檔案的方法,此即將原有檔案的長度設定為0,或者說是放棄原有的檔案內容。
(6)  設定檔案的讀/寫位置。 前述的檔案讀/寫操作都只提供了對檔案順序存取的手段,即每次都是從檔案的始端讀或寫。
設定檔案讀/寫位置的操作,用於設定檔案讀/寫指標的位置,以便每次讀/寫檔案時,不是從其始端而是從所設定的位置開始操作。也正因如此,才能改順序存取為隨機存取。

檔案的開啟和關閉

當前OS所提供的大多數對檔案的操作, 其過程大致都是這樣兩步: 第一步是通過檢索檔案目錄來找到指定檔案的屬性及其在外存上的位置; 第二步是對檔案實施相應的操作,如讀檔案或寫檔案等。 當用戶要求對一個檔案實施多次讀/寫或其它操作時,每次都要從檢索目錄開始。 為了避免多次重複地檢索目錄,在大多數OS中都引入了“開啟”(open)這一檔案系統呼叫 當用戶第一次請求對某檔案進行操作時,先利用 open系統呼叫將該檔案開啟。
所謂“開啟” ,是指系統將指名檔案的屬性(包括該檔案在外存上的物理位置)從外存拷貝到記憶體開啟檔案表的一個表目中,並將該表目的編號(或稱為索引)返回給使用者。 以後,當用戶再要求對該檔案進行相應的操作時,便可利用系統所返回的索引號向系統提出操作請求。 系統這時便可直接利用該索引號到開啟檔案表中去查詢,從而避免了對該檔案的再次檢索。 這樣不僅節省了大量的檢索開銷,也顯著地提高了對檔案的操作速度。 如果使用者已不再需要對該檔案實施相應的操作時,可利用“關閉”(close)系統呼叫來關閉此檔案,OS將會把該檔案從開啟檔案表中的表目上刪除掉。 

程式設計中的IO

所以,我們現在可以確定,對於系統中的程式和資料的管理,都是作業系統幫助我們進行管理的 應用程式中對檔案的操作,也都是請求作業系統 I/O 含義為 in  和 out,也就是 入  和 出,計算機世界裡,一般指代的是input 和output ,也就是輸入和輸出. 所有的應用程式都是工作在使用者態,可是所有的系統資源都是作業系統管理,也就是核心態 所以說,應用程式的輸入輸出,必須要依賴作業系統. 作業系統本身就是一種高層次的抽象,他負責管理檔案,檔案本身也是一種抽象. image_5b92107a_226c 如上圖所示 作為應用程式設計師,我們都是工作在應用程式層 我們會使用某種程式設計語言,編寫我們自己的應用程式 程式設計語言給我們提供了IO類庫以便更高效的進行程式編寫 IO類庫通過呼叫作業系統提供的檔案系統呼叫介面來完成最終的功能

IO不僅僅是跟作業系統打交道

作為開發者,我們可能不僅僅會通過作業系統 讀取或者寫入 資料.檔案. 我們還極其可能會對我們讀取的檔案資料進行操作,而且,事實上我們幾乎不會單純的從作業系統讀寫資料 我們也可能從其他來源獲得資料,組裝資料,這些都是程式設計中的IO要做的事情
也就是說程式語言中的IO 不僅僅要解決溫飽問題(通過作業系統讀取檔案) 還要解決奔小康的問題(能夠對各種來源,各種資料檔案 更便捷的進行操作)
程式設計語言的IO類庫,是作為程式設計語言的支撐存在的 沒有行不行?沒有當然可以,沒有程式設計語言的時候,大神們還用二進位制紙帶去程式設計呢 但是效率?難度? 等等??  可想而知 如果一門高階程式設計語言,基本的方法函式都需要全部自己去實現的話 這門語言不太可能有人去用,除非他有什麼天才之處或者特殊場景 就另當別論了 所以說,程式設計語言必須設計一套合適的IO方法類庫以供呼叫 image_5b92107a_393f 所以想要設計好一個程式語言的IO類庫,有兩個基本方面:
邏輯功能使用上需要盡最大可能的照顧到開發者
實現上儘可能的高效
當然上面說的這些需要解決的問題 並不僅限於Java IO 其他語言中類庫涉及這面臨的也是這些問題 不過這兩個方面,就足夠讓人頭疼了,我們會在接下來系統的介紹Java IO,領略一下Java IO的風采~ 我的部落格即將搬運同步至騰訊雲+社群,邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=hs07dhocm7xg