Java中I/O操作主要是指使用Java進(jìn)行輸入,輸出操作. Java所有的I/O機(jī)制都是基于數(shù)據(jù)流進(jìn)行輸入輸出,這些數(shù)據(jù)流表示了字符或者字節(jié)數(shù)據(jù)的流動(dòng)序列。
數(shù)據(jù)流是一串連續(xù)不斷的數(shù)據(jù)的集合,就象水管里的水流,在水管的一端一點(diǎn)一點(diǎn)地供水,而在水管的另一端看到的是一股連續(xù)不斷的水流。數(shù)據(jù)寫(xiě)入程序可以是一段、一段地向數(shù)據(jù)流管道中寫(xiě)入數(shù)據(jù),這些數(shù)據(jù)段會(huì)按先后順序形成一個(gè)長(zhǎng)的數(shù)據(jù)流。對(duì)數(shù)據(jù)讀取程序來(lái)說(shuō),看不到數(shù)據(jù)流在寫(xiě)入時(shí)的分段情況,每次可以讀取其中的任意長(zhǎng)度的數(shù)據(jù),但只能先讀取前面的數(shù)據(jù)后,再讀取后面的數(shù)據(jù)(不能隨機(jī)讀取)。不管寫(xiě)入時(shí)是將數(shù)據(jù)分多次寫(xiě)入,還是作為一個(gè)整體一次寫(xiě)入,讀取時(shí)的效果都是完全一樣的。
簡(jiǎn)而言之:數(shù)據(jù)流是一組有序,有起點(diǎn)和終點(diǎn)的字節(jié)的數(shù)據(jù)序列。包括輸入流和輸出流。
當(dāng)程序需要讀取數(shù)據(jù)的時(shí)候,就會(huì)建立一個(gè)通向數(shù)據(jù)源的連接,這個(gè)數(shù)據(jù)源可以是文件,內(nèi)存,或是網(wǎng)絡(luò)連接。類(lèi)似的,當(dāng)程序需要寫(xiě)入數(shù)據(jù)的時(shí)候,就會(huì)建立一個(gè)通向目的地的連接。
數(shù)據(jù)流分類(lèi):
流序列中的數(shù)據(jù)既可以是未經(jīng)加工的原始二進(jìn)制數(shù)據(jù),也可以是經(jīng)一定編碼處理后符合某種格式規(guī)定的特定數(shù)據(jù)。因此Java中的流分為兩種: 1) 字節(jié)流: 數(shù)據(jù)流中最小的數(shù)據(jù)單元是字節(jié) 2) 字符流: 數(shù)據(jù)流中最小的數(shù)據(jù)單元是字符, Java中的字符是Unicode編碼,一個(gè)字符占用兩個(gè)字節(jié)。
概覽
Java.io包中最重要的就是5個(gè)類(lèi)和一個(gè)接口。5個(gè)類(lèi)指的是File、OutputStream、InputStream、Writer、Reader;一個(gè)接口指的是Serializable。掌握了這些就掌握了Java I/O的精髓了。
Java I/O主要包括如下3層次:
- 流式部分——最主要的部分。如:OutputStream、InputStream、Writer、Reader等
- 非流式部分——如:File類(lèi)、RandomAccessFile類(lèi)和FileDescriptor等類(lèi)
- 其他——文件讀取部分的與安全相關(guān)的類(lèi),如:SerializablePermission類(lèi),以及與本地操作系統(tǒng)相關(guān)的文件系統(tǒng)的類(lèi),如:FileSystem類(lèi)和Win32FileSystem類(lèi)和WinNTFileSystem類(lèi)。