什么是IO IO(Input/Output)是計算機輸出/輸出的接口。Java的核心庫
java.io提供了全面的IO接口,包括:文件讀寫(xiě),標準設備輸出等等。Java中IO是以流為基礎進(jìn)行輸入輸出的,所有數據被串行化寫(xiě)入輸出流,或者從輸入流讀入。此外,Java也對塊傳輸提供支持,在核心庫java.
nio中采用的便是塊IO。關(guān)于NIO我們在后面還有專(zhuān)門(mén)的討論。
流IO的好處是簡(jiǎn)單易用,缺點(diǎn)是效率較低。塊IO效率很高,但編程比較復雜。
Java IO模型 Java的IO模型設計非常優(yōu)秀,它使用Decorator模式,按功能劃分Stream,您可以動(dòng)態(tài)裝配這些Stream,以便獲得您需要的功能。例如,您需要一個(gè)具有緩沖的文件輸入流,則應當組合使用FileInputStream和BufferedInputStream。
Java的IO體系分Input/Output和Reader/Writer兩類(lèi),區別在于Reader/Writer在讀寫(xiě)文本時(shí)能自動(dòng)轉換內碼?;旧?,所有的IO類(lèi)都是配對的,即有XxxInput就有一個(gè)對應的XxxOutput。
Java IO教程 如果您對Decorator模式非常了解,就能輕易地看出Java的IO類(lèi)結構:根接口是InputStream/OutputStream,充當數據源的IO類(lèi)有FileInputStream/FileOutputStream,ByteArrayInputStream/ByteArrayOutputStream等,充當裝飾功能的IO類(lèi)有BufferedInputStream/BufferedOutputStream,DataInputStream/DataOutputStream等,它們都是繼承裝飾接口FilterInputStream/FilterOutputStream。使用IO時(shí),首先創(chuàng )建一個(gè)數據源IO,然后根據需要的功能創(chuàng )建裝飾類(lèi)IO,其
構造函數的參數為已創(chuàng )建的數據源IO。我們以創(chuàng )建一個(gè)具有緩沖的文件輸入流為例,假定需要從磁盤(pán)讀取文件“C:\
log.txt”:
// 創(chuàng )建一個(gè)FileInputStream:
FileInputStream fileInput = new FileInputStream("C:\\log.txt");
// 創(chuàng )建一個(gè)BufferedInputStream:
BufferedInputStream bufferedInput = new BufferedInputStream(fileInput);
// 現在得到的bufferedInput即是具有緩沖的文件輸入流
或者進(jìn)一步簡(jiǎn)寫(xiě)如下:
InputStream input = new BufferedInputStream(
ew FileInputStream("C:\\log.txt"));
// 現在得到的input即是具有緩沖的文件輸入流
在您對Java的IO有了總體了解后,我們推薦您看看教程Introduction to Java I/O和I/O: Reading and Writing。
Java NIO編程 NIO提供了對塊IO的支持,使用塊IO的好處是效率更高,而且Java的NIO將直接調用操作系統提供的許多高級IO接口,支持塊傳輸,讀寫(xiě)鎖定,異步IO等功能,效率非常高。NIO的編程模型是通道和緩沖區,推薦您閱讀Getting started with new I/O(中文)。 }