FORTUNE

          THE WAY TO THE MASTER...
          posts - 49, comments - 18, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          java 流與文件

          Posted on 2006-03-14 16:13 fortune 閱讀(1679) 評論(2)  編輯  收藏 所屬分類: 我的學(xué)習(xí)筆記
          在java中可以讀出一系列字節(jié)的對象稱為“輸入流”,而能向其寫入一系列字節(jié)的對象稱為“輸出流”。這2種對象分別是用抽象類InputStream和OutputStream來實(shí)現(xiàn)的。對于Unicode格式保存的信息(每個字符都用了2個字節(jié)來存儲),有專門的類處理,這些類是從抽象類Reader和Writer繼承而來。

          java以這4個抽象類為基礎(chǔ),衍生出一系列具體的類,幾乎可以完成所有的輸入/輸出過程。

          InputStream類提供了一個抽象方法:abstract    int    read()
          讀取一個字節(jié)并將它返回,由此類衍生出來的其它具體類都會覆蓋這個方法,以提供有用的功能。
          類似的,OutputStream類定義了抽象方法abstract    int    write(int  b)

          完成流的讀寫操作后應(yīng)記住要用close()方法將其關(guān)閉。關(guān)閉輸出流的同時也會刷新輸出流使用的緩沖區(qū):在緩沖區(qū)中等待組合成一個較大的數(shù)據(jù)包的臨時存儲的字符,都會通過網(wǎng)絡(luò)傳送出去。特別是,加入沒有關(guān)閉一個文件,最后一個字節(jié)報(bào)可能永遠(yuǎn)都不會投遞出去。

          InputStream和OutputStream類允許我們讀取單獨(dú)的字節(jié)和字節(jié)數(shù)組,它們不對字符串及數(shù)字進(jìn)行讀寫。DataInputStream和DataOutputStream允許對所有基本java類型進(jìn)行讀寫。
          對于Unicode文本,需使用Reader和Writer衍生出的類,它提供的基本方法和InputStream和OutputStream類似:abstract    int    read()
                   abstract    int    write(int  b)
          read方法返回的要么是個Unicode字符(0-65535間的一個整數(shù))要么是-1(已抵達(dá)文件末尾)
          無論是read還是write方法都會阻塞線程的運(yùn)行,直到字節(jié)被實(shí)際讀出或?qū)懭霝橹埂@胊vailable方法,我們可以檢查目前能夠讀取的字節(jié)數(shù)。

          int   byteAvailable     =    System.in.available();
          if   (byteAvailable  〉 0)
          {byte[]   data  =  new byte [byteAvailable];
             System.in.read(data);
          }

          FileInputStream 和 FileOutputStream 使我們能將磁盤文件和輸入流及輸出流關(guān)聯(lián)起來。
          FileInputStream fin = new FileInputStream("employee.dat");
          也可以
          File f = new File("employee.dat");
          FileInputStream fin = new FileInputStream(f);

          與InputStream and OutputStream 類似, 它也僅支持字節(jié)級的讀寫操作,只能從fin對象中讀取字節(jié)和字節(jié)數(shù)組:byte b = (byte) fin.read();

          FileOutputStream(String name)新建一個name指定的文件輸出流,該方法會自動刪除同名的任何現(xiàn)存文件!!!

          文本流

          二進(jìn)制的輸入輸出速度很快效率很高但是人無法看懂這種格式。java使用的是Unicode字符

          File, File(Input/Output)Stream, RandomAccessFile是處理本地文件的類

          Data(Input/Output)Stream是一個過濾流的子類,借此可以讀寫各種基本數(shù)據(jù), 在文件和網(wǎng)絡(luò)中經(jīng)常使用.如: readByte, writeBoolean等.

          Buffered(Input/Output)Stream的作用是在數(shù)據(jù)送到目的之前先緩存,達(dá)到一定數(shù)量時再送到目的,用已減少阻塞次數(shù).

          Piped(Input/Output)Stream適合與一個處理的輸出作為另一個處理的輸入的情況



           
          !要想以二進(jìn)制格式寫入數(shù)據(jù),使用DataOutputStream,要想以文本格式寫入數(shù)據(jù),使用PrintWriter
          二進(jìn)制讀入使用DataInputStream,可讀取文本格式的數(shù)據(jù)Java并未提供這樣的類。唯一用來處理文本輸入的是BufferedReader類它包含了一個方法readLine。




          評論

          # re: java 流與文件  回復(fù)  更多評論   

          2006-03-15 13:10 by 余靈
          寫的好經(jīng)典啊`對我學(xué)習(xí)JAVA的人來說真是太有幫助了,謝謝樓豬

          # re: java 流與文件  回復(fù)  更多評論   

          2008-04-18 09:23 by Lianyisha
          確實(shí)總結(jié)的特別好,受益了。謝謝樓主
          主站蜘蛛池模板: 奈曼旗| 枣阳市| 东阳市| 竹溪县| 昌黎县| 义马市| 临洮县| 上饶市| 油尖旺区| 定陶县| 清丰县| 淄博市| 龙口市| 宁乡县| 彭泽县| 黄山市| 侯马市| 巴青县| 电白县| 宿松县| 永靖县| 霍山县| 肥西县| 谢通门县| 淮阳县| 和顺县| 沙坪坝区| 巨野县| 海晏县| 武乡县| 淮南市| 保靖县| 井陉县| 蒙山县| 北安市| 石狮市| 资源县| 钦州市| 襄樊市| 桐柏县| 巴彦县|