java中的输入输出流概念_Java输入输出(IO)和流的基本概念
輸入輸出(I/O)是指程序與外部設(shè)備或其他計算機進行交互的操作。幾乎所有的程序都具有輸入與輸出操作,如從鍵盤上讀取數(shù)據(jù),從本地或網(wǎng)絡(luò)上的文件讀取數(shù)據(jù)或?qū)懭霐?shù)據(jù)等。通過輸入和輸出操作可以從外界接收信息,或者是把信息傳遞給外界。Java把這些輸入與輸出操作用流來實現(xiàn),通過統(tǒng)一的接口來表示,從而使程序設(shè)計更為簡單。
Java流的概念
流(Stream)是指在計算機的輸入輸出操作中各部件之間的數(shù)據(jù)流動。按照數(shù)據(jù)的傳輸方向,流可分為輸入流與輸出流。Java語言里的流序列中的數(shù)據(jù)既可以是未經(jīng)加工的原始二進制數(shù)據(jù),也可以是經(jīng)過一定編碼處理后符合某種特定格式的數(shù)據(jù)。
1.輸入輸出流
在Java中,把不同類型的輸入輸出源抽象為流,其中輸入和輸出的數(shù)據(jù)稱為數(shù)據(jù)流(Data Stream)。數(shù)據(jù)流是Java程序發(fā)送和接收數(shù)據(jù)的一個通道,數(shù)據(jù)流中包括輸入流(Input Stream)和輸出流(Output Stream)。通常應(yīng)用程序中使用輸入流讀出數(shù)據(jù),輸出流寫入數(shù)據(jù)。 流式輸入、輸出的特點是數(shù)據(jù)的獲取和發(fā)送均沿數(shù)據(jù)序列順序進行。相對于程序來說,輸出流是往存儲介質(zhì)或數(shù)據(jù)通道寫入數(shù)據(jù),而輸入流是從存儲介質(zhì)或數(shù)據(jù)通道中讀取數(shù)據(jù),一般來說關(guān)于流的特性有下面幾點:先進先出,最先寫入輸出流的數(shù)據(jù)最先被輸入流讀取到。
順序存取,可以一個接一個地往流中寫入一串字節(jié),讀出時也將按寫入順序讀取一串字節(jié),不能隨機訪問中間的數(shù)據(jù)。
只讀或只寫,每個流只能是輸入流或輸出流的一種,不能同時具備兩個功能,在一個數(shù)據(jù)傳輸通道中,如果既要寫入數(shù)據(jù),又要讀取數(shù)據(jù),則要分別提供兩個流。
2.緩沖流
為了提高數(shù)據(jù)的傳輸效率,引入了緩沖流(Buffered Stream)的概念,即為一個流配備一個緩沖區(qū)(Buffer),一個緩沖區(qū)就是專門用于傳送數(shù)據(jù)的一塊內(nèi)存。
當(dāng)向一個緩沖流寫入數(shù)據(jù)時,系統(tǒng)將數(shù)據(jù)發(fā)送到緩沖區(qū),而不是直接發(fā)送到外部設(shè)備。緩沖區(qū)自動記錄數(shù)據(jù),當(dāng)緩沖區(qū)滿時,系統(tǒng)將數(shù)據(jù)全部發(fā)送到相應(yīng)的外部設(shè)備。當(dāng)從一個緩沖流中讀取數(shù)據(jù)時,系統(tǒng)實際是從緩沖區(qū)中讀取數(shù)據(jù),當(dāng)緩沖區(qū)為空時,系統(tǒng)就會從相關(guān)外部設(shè)備自動讀取數(shù)據(jù),并讀取盡可能多的數(shù)據(jù)填滿緩沖區(qū)。 使用數(shù)據(jù)流來處理輸入輸出的目的是使程序的輸入輸出操作獨立于相關(guān)設(shè)備,由于程序不需關(guān)注具體設(shè)備實現(xiàn)的細節(jié)(具體細節(jié)由系統(tǒng)處理),所以對于各種輸入輸出設(shè)備,只要針對流做處理即可,不需修改源程序,從而增強了程序的可移植性。
I/O流類概述
為了方便流的處理,Java語言提供了java.io包,在該包中的每一個類都代表了一種特定的輸入或輸出流。為了使用這些流類,編程時需要引入這個包。?Java提供了兩種類型的輸入輸出流:一種是面向字節(jié)的流,數(shù)據(jù)的處理以字節(jié)為基本單位;另一種是面向字符的流,用于字符數(shù)據(jù)的處理。字節(jié)流(Byte Stream)每次讀寫8位二進制數(shù),也稱為二進制字節(jié)流或位流。字符流一次讀寫16位二進制數(shù),并將其做一個字符而不是二進制位來處理。需要注意的是,為滿足字符的國際化表示,Java語言的字符編碼采用的是16位的Unicode碼,而普通文本文件中采用的是8位ASCⅡ碼。
java.io中類的層次結(jié)構(gòu)如圖10-1所示。圖10-1 java.io包的頂級層次結(jié)構(gòu)圖
針對一些頻繁的設(shè)備交互,Java語言系統(tǒng)預(yù)定了3個可以直接使用的流對象,分別是:System.in(標準輸入),通常代表鍵盤輸入。
System.out(標準輸出):通常寫往顯示器。
System.err(標準錯誤輸出):通常寫往顯示器。
在Java語言中使用字節(jié)流和字符流的步驟基本相同,以輸入流為例,首先創(chuàng)建一個與數(shù)據(jù)源相關(guān)的流對象,然后利用流對象的方法從流輸入數(shù)據(jù),最后執(zhí)行close()方法關(guān)閉流。
總結(jié)
以上是生活随笔為你收集整理的java中的输入输出流概念_Java输入输出(IO)和流的基本概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux中VScode中文乱码问题:一
- 下一篇: Eclipse优化设置技巧