posts - 40,  comments - 4,  trackbacks - 0
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章分類

          文章檔案

          連結

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          數據流

          Java所有的I/O機制都是基于數據流的,這些數據流表示了字符或者字節數據的流動序列。Java的I/O流提供了讀寫數據的標準方法。任何Java中表示數據源的對象都會提供以數據流的方式讀寫它的數據的方法。

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

          java.io軟件包提供了一些類和接口,它們在由InputStream和OuputStream類提供的讀寫操作的頂端定義了一些有用的抽象。例如,ObjectInputStream類提供了讓你把輸入/輸出流中的數據當成對象來讀取的方法,而ObjectOutputStream類提供了讓你能夠把Java對象寫入數據流中的方法。

          優化讀寫過程

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

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

          讀取數據

          當你從一個相應的數據源對象里提取輸入流或者是創建一個讀取器對象的時候就會自動打開一個輸入流。例如,要為一個文件打開輸入流,我們只需要以下面的方式把文件名傳遞給Java.io.FileReader對象的構造函數:

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

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

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

          要關閉一個輸入流以及這個流使用的所有系統資源,你只需要以下面的方式調用close方法:

          fileReader.close();

          寫入數據

          象一個輸入流一樣,輸出流通常在你從相應的數據源提取它或者是在你創建一個寫入對象的時候被自動的打開。例如,要為一個文件打開輸出流,我們把文件的名字傳遞給java.io.FileWriter對象的構造函數,如下所示:

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

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

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

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

          fileWriter.write(buffer, 0, byteCount);

          要關閉一個輸出流并釋放所有與之相關的系統資源,可以使用close方法,就象這樣:

          fileWriter.close();

          要強迫寫出一個輸出流中的所有數據,可以使用下面的flush方法:

          fileWriter.flush();

          把它們全部綜合起來

          我們可以使用我們學習過的這些函數從一個文件中讀取數據并同時寫到另一個文件中去,如表C所示。

          總結

          Java的輸入/輸出機制為從不同的數據源讀取和寫入字符增加了一套簡單而標準化的API。你對一種數據源使用Java流的經驗能夠讓你容易的使用其它由Java提供的數據源類型。

          在我們下一篇文章中,我們將會開始學習Java平臺的聯網和遠程通訊架構。我們將會把我們對Java流的討論擴展到這些環境并演示如何打開遠程數據源,并象操作本地數據源,比方文件一樣,寫入數據和讀取數據。

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

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 安宁市| 平邑县| 江孜县| 元阳县| 夹江县| 白玉县| 大兴区| 定兴县| 新巴尔虎左旗| 金沙县| 铜川市| 西城区| 商水县| 张家口市| 峡江县| 黄冈市| 崇礼县| 浙江省| 庆元县| 东港市| 武穴市| 资溪县| 巫溪县| 冷水江市| 镇康县| 齐齐哈尔市| 天峻县| 武川县| 乌拉特后旗| 平顺县| 孙吴县| 义乌市| 马公市| 迭部县| 乌什县| 庄河市| 陇西县| 义乌市| 黄骅市| 紫金县| 微山县|