posts - 40,  comments - 4,  trackbacks - 0

          數(shù)據(jù)流

          Java所有的I/O機(jī)制都是基于數(shù)據(jù)流的,這些數(shù)據(jù)流表示了字符或者字節(jié)數(shù)據(jù)的流動(dòng)序列。Java的I/O流提供了讀寫數(shù)據(jù)的標(biāo)準(zhǔn)方法。任何Java中表示數(shù)據(jù)源的對(duì)象都會(huì)提供以數(shù)據(jù)流的方式讀寫它的數(shù)據(jù)的方法。

          Java.io是大多數(shù)面向數(shù)據(jù)流的輸入/輸出類的主要軟件包。這個(gè)軟件包包含了兩個(gè)抽象類,InputStream和OutputStream。所有其它面象數(shù)據(jù)流的輸入/輸出類都要擴(kuò)展這兩個(gè)基類。

          java.io軟件包提供了一些類和接口,它們?cè)谟蒊nputStream和OuputStream類提供的讀寫操作的頂端定義了一些有用的抽象。例如,ObjectInputStream類提供了讓你把輸入/輸出流中的數(shù)據(jù)當(dāng)成對(duì)象來讀取的方法,而ObjectOutputStream類提供了讓你能夠把Java對(duì)象寫入數(shù)據(jù)流中的方法。

          優(yōu)化讀寫過程

          JDK 1.1 增加了一套讀寫類,它們提供了比現(xiàn)有數(shù)據(jù)流類更有用的抽象和更好的輸入/輸出性能。例如,BufferedReader和BufferedWriter 類被用來從基于字符的輸入和輸出流中讀取和寫入文本。BufferdReader 類緩存字符以更高效的讀取字符串,數(shù)組和文本行。BufferedWriter類緩存字符以更高效的寫入字符串,數(shù)組和文本行。BufferedReader和BufferedWriter 類可以按需求進(jìn)行設(shè)置。

          Java 輸入/輸出架構(gòu)提供的讀取器和寫入器類包括 LineNumberReader 類,CharArrayReader類,F(xiàn)ileReader類,F(xiàn)ilterReader類,PushbackReader類,PipedReader 類,StringReader類以及其它一些類。這些類是在InputStream和OuputStream類頂部的包裹類因此提供了與 InputStream和OuputStream類相似的方法。但是,這些類為讀寫特定的對(duì)象,比方文件,字符數(shù)組和字符串等等提供了更高效而有用的抽象。

          讀取數(shù)據(jù)

          當(dāng)你從一個(gè)相應(yīng)的數(shù)據(jù)源對(duì)象里提取輸入流或者是創(chuàng)建一個(gè)讀取器對(duì)象的時(shí)候就會(huì)自動(dòng)打開一個(gè)輸入流。例如,要為一個(gè)文件打開輸入流,我們只需要以下面的方式把文件名傳遞給Java.io.FileReader對(duì)象的構(gòu)造函數(shù):

          java.io.FileReader fileReader = new java.io.FileReader("/home/me/myfile.txt");

          要按順序讀取FileReader底層的輸入流中的一個(gè)字節(jié)數(shù)據(jù),只需要使用不帶參數(shù)的read方法。表A中的代碼段從一個(gè)文件讀取文本數(shù)據(jù),一次一個(gè)字符,然后把它寫入System.out里。

          要從輸入流讀取指定數(shù)目的字節(jié)數(shù)據(jù)到char數(shù)組里,只需要使用帶一個(gè)char[]參數(shù)的read方法。數(shù)組的長度被用來確定應(yīng)該讀取的字符的個(gè)數(shù)。表B演示了這個(gè)技術(shù)。

          要關(guān)閉一個(gè)輸入流以及這個(gè)流使用的所有系統(tǒng)資源,你只需要以下面的方式調(diào)用close方法:

          fileReader.close();

          寫入數(shù)據(jù)

          象一個(gè)輸入流一樣,輸出流通常在你從相應(yīng)的數(shù)據(jù)源提取它或者是在你創(chuàng)建一個(gè)寫入對(duì)象的時(shí)候被自動(dòng)的打開。例如,要為一個(gè)文件打開輸出流,我們把文件的名字傳遞給java.io.FileWriter對(duì)象的構(gòu)造函數(shù),如下所示:

          java.io.FileWriter fileWriter = new
          java.io.FileWriter("/home/me/out.txt");

          要將一個(gè)特定的字符寫入到輸出流中,可以使用帶一個(gè)int參數(shù)的write方法,int參數(shù)代表要定入的字符。

          int aChar = (int)'X';
          fileWriter.write(aChar);

          要在輸出流給定的偏移地址寫入一個(gè)char數(shù)組中特定數(shù)目的字符,你可以使用帶一個(gè)char[]參數(shù),一個(gè)int 偏移量參數(shù)和一個(gè)int長度參數(shù)的write方法,如下面的例子所示:

          fileWriter.write(buffer, 0, byteCount);

          要關(guān)閉一個(gè)輸出流并釋放所有與之相關(guān)的系統(tǒng)資源,可以使用close方法,就象這樣:

          fileWriter.close();

          要強(qiáng)迫寫出一個(gè)輸出流中的所有數(shù)據(jù),可以使用下面的flush方法:

          fileWriter.flush();

          把它們?nèi)烤C合起來

          我們可以使用我們學(xué)習(xí)過的這些函數(shù)從一個(gè)文件中讀取數(shù)據(jù)并同時(shí)寫到另一個(gè)文件中去,如表C所示。

          總結(jié)

          Java的輸入/輸出機(jī)制為從不同的數(shù)據(jù)源讀取和寫入字符增加了一套簡單而標(biāo)準(zhǔn)化的API。你對(duì)一種數(shù)據(jù)源使用Java流的經(jīng)驗(yàn)?zāi)軌蜃屇闳菀椎氖褂闷渌蒍ava提供的數(shù)據(jù)源類型。

          在我們下一篇文章中,我們將會(huì)開始學(xué)習(xí)Java平臺(tái)的聯(lián)網(wǎng)和遠(yuǎn)程通訊架構(gòu)。我們將會(huì)把我們對(duì)Java流的討論擴(kuò)展到這些環(huán)境并演示如何打開遠(yuǎn)程數(shù)據(jù)源,并象操作本地?cái)?shù)據(jù)源,比方文件一樣,寫入數(shù)據(jù)和讀取數(shù)據(jù)。

          posted on 2006-11-19 20:06 larryjava 閱讀(138) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 锦州市| 休宁县| 新化县| 武宣县| 襄城县| 锦屏县| 大足县| 正安县| 富源县| 和静县| 宜宾市| 大城县| 抚顺县| 巫溪县| 买车| 濮阳市| 剑川县| 颍上县| 潞西市| 泊头市| 称多县| 开平市| 潮安县| 华坪县| 科技| 安新县| 衡东县| 类乌齐县| 平阳县| 浏阳市| 赤壁市| 临湘市| 五河县| 明光市| 中阳县| 房山区| 始兴县| 温州市| 山西省| 类乌齐县| 驻马店市|