Java輸入/輸出(I/O
)處理從源讀取數(shù)據(jù)并將數(shù)據(jù)寫入目標。通常,讀取存儲在文件中的數(shù)據(jù)或使用I/O
將數(shù)據(jù)寫入到文件中。
java.io
和java.nio
包中包含處理輸入/輸出的Java類。java.io
包具有執(zhí)行I/O
的類。java.nio
包是新的I/O
包。
java.io
包中的類都與基于流的I/O
操作有關(guān)。 基于流的I/O
使用流在數(shù)據(jù)源和Java程序之間傳輸字節(jié)數(shù)據(jù)。
Java程序每次從一個字節(jié)讀取或?qū)懭胍粋€字節(jié)。這種執(zhí)行I/O
操作的方法很慢。流可以用于單向數(shù)據(jù)傳輸。 輸入流只能將數(shù)據(jù)從數(shù)據(jù)源傳輸?shù)絁ava程序,而輸出流只能將數(shù)據(jù)從Java程序傳輸?shù)綌?shù)據(jù)目標。
新輸入/輸出(NIO)解決了基于流的I/O
中的慢速問題。在NIO
中處理I/O
操作的通道和緩沖區(qū)。一個通道就像一個流。它表示數(shù)據(jù)源和Java程序之間的連接。
通道提供雙向數(shù)據(jù)傳輸工具,可以使用通道來讀取數(shù)據(jù)以及寫入數(shù)據(jù)??梢垣@得只讀通道,只寫通道或讀寫通道。緩沖區(qū)是有界數(shù)據(jù)容器,具有確定其可能包含數(shù)據(jù)的上限固定容量。
在基于流的I/O
中,可直接將數(shù)據(jù)寫入流。 在基于通道的I/O
中將數(shù)據(jù)寫入緩沖區(qū),并將該緩沖區(qū)傳遞到將數(shù)據(jù)寫入數(shù)據(jù)目標的通道。
當(dāng)從數(shù)據(jù)源讀取數(shù)據(jù)時,向一個通道傳遞一個緩沖區(qū)。通道將數(shù)據(jù)從數(shù)據(jù)源讀入緩沖區(qū)。
Java 7引入了新的輸入/輸出API,它提供了一個新的I/O
API。 它提供了原始文件I/O
API中缺少的一些功能。它向Java類庫添加了三個包:java.nio.file
,java.nio.file.attribute
和java.nio.file.spi
。
新的輸入/輸出API以統(tǒng)一的方式處理所有文件系統(tǒng)。新輸入/輸出API提供的文件系統(tǒng)支持是可擴展的。新的輸入/輸出API支持所有文件系統(tǒng)上的基本文件操作(復(fù)制,移動和刪除)。它支持符號鏈接。
它支持訪問文件系統(tǒng)和文件的屬性??梢詣?chuàng)建一個監(jiān)視服務(wù)來監(jiān)視目錄上的任何事件,例如添加新文件或子目錄,刪除文件等。