第12章Java IO系統

來源:互聯網
上載者:User

對程式語言的設計者來說,建立一個好的輸入/輸出系統是一項艱難的任務。
1。File類實際是filepath,它即能代表一個特定檔案的名稱,又能代表一個目錄下的一組檔案的名稱。
       用list(FilenameFilter)方法,獲得此File對象包含的全部列表。FilenameFilter介面,重載accept方法
      提供檔案名稱過濾功能。

2。File類不僅僅只代表存在的檔案或者目錄,還可用用File對象建立新的目錄或者尚不存在的這個目錄路徑,
      查看檔案的屬性,檢查某個File對象代表的檔案還是目錄,刪除檔案。

3。I/O類庫中使用"流",它代表任何有能力產生資料的資料來源對象或者是有能力接收資料的接收端對象。I/O
     分為輸入資料流和輸出資料流,輸入資料流基類InputStream或者Reader,輸出資料流基類OutputStream或者Writer。其中
     InputStream,OutputStream是java 1.0的產物,面向位元組的。Reader,Writer 是java1.1 I/O修改,它們
     提供Unicode與面向字元的I/O功能。

4。InputStream用來表示從不同資料來源產生輸入的類。這些資料來源包括:
       1)位元組數組   ByteArrayInputStream,允許將記憶體的緩衝區當InputStream.
       2)String對象。StringBufferInputStream.
       3)檔案。  FileInputStream。
       4)管道。PipedIputStream
       5)其他流組成的序列。
       6)其他資料來源,如Internet串連等。
       FilterInputStream是InputStream的修飾器。

5。OutputStream子類有:ByteArrayOutputStream,FileOutputStream,PipedOutputStream
         ,FilterOutputStream(OutputStream的修飾器)

6。java的I/O流以一種"套接"的方式組合使用。資料來源用InpuStream,和OutPutStream表示,資料來源的
      讀寫是有FilterInputStream和FilterOutputStream完成。

7。FilterInputStream有:DataInputStream,BufferedInputStream,LineNumberInputStream,
                                               PushbackInputStream.
     FilterOutputStream有:DataOutputStream,PrintStream,BufferedOutputStream.

8。Reader,Writer是java1.1改革平,對應InputStream,OutputStream,FilterInputStream,
       FilterOutPutStream..Reader,Writer有相應的類。參考JDK手冊。其中沒有改變的類是:
      DataOutputStream,File,RandomAccessFile,SequenceInputStream.
      RandomAccessFile不是InputStream或者OutputStream繼承體系的一部分,它是獨立的。

9。java標準I/O,System.out  ,  System.in  ,  System.err. System類提供了一些簡單的靜態方法,
      以允許對標準輸入,輸出,錯誤進行重新導向:
     setIn(InputStream) , setOut(PrintStream) , setErr(PrintStream);

10。JDK1.4的java.nio.*引入了新的java I/O類,其目的在於提高速度,舊的I/O也使用nio重新設計過。
        基本方式:通道和緩衝器。 唯一與通道互動的緩衝器是ByteBuffer。  
       舊I/O類庫中有三個類被修改了,用以產生FileChannel,他們是:FileInputStream,FileOutputstream
       RandomAccessFile。Reader和Writer這種字元模式類不能用來產生通道,但是java.noi.channels.
      Channels類提供了實用方法,用一通道中產生Reader和Writer.

11。一段執行個體代碼:
        .....
        FileChannel fc = new FileOutputStream("filename.extend").getChannel();
        fc.wirte(ByteBuffer.wrap("some text ".getBytes() ) );
        fc.close();
        fc  = new RandomAccessFile("data.txt","rw').getChannel();
        fc.position( fc.size() );
        fc.wirte(ByteBuffer.wrap("some text ".getBytes() ) );
        fc.close();
        fc = new FileInputStream("data.txt").getChannel();
        Bytebuffer buff  =  ByteBuffer.allocate(BSIZE);
        fc.read(buff);
        buff.flip();
       while(buff.hasRemaining()){
              System.out.print( (char)buff.get() );
        }
 
12。transferTo() , transferFrom()允許將一個通道和另一個通道直接相接。

13。ByetBuffer.asCharBuffer 使其作為CharBuffer(提供良好的toString方法)。但是:緩衝器容納
         的是普通的位元組,為了他他們轉換為字元,要麼在輸入的時候對其編碼,要麼在從緩衝器輸出
         時對他們進行解碼。使用java.nio.charset.Charsetl類實現。

14。從ByteBuffer獲得基本類型如:
          bb.asCharBuffer().put("some text");
          bb.getChar();
          bb.asShortBuffer().put(9458);
          bb.getShort();
          ...............
         各種基本類型的封裝,可以看成是ByteBuffer的"視圖緩衝器";
          ByteBuffer bb = ByteBuffer.allocate(SIZE);
         IntBuffer   ib  = bb.asIntBuffer()  ; IntBuffer 是"視圖緩衝器",等等。

15。不同機器可能會使用不同的位元組排序方法儲存資料。分為"big endian"和"little endian".網上常常使用
        big endian 。java的設定方法 bb.order(ByteOrder.BIG_ENDIAN)  ,
         或者ByteOrder.LITTLE_ENDIAN

16。Buffer由資料和可以高效訪問及操作這些資料的四個索引組成:mark , position, limit ,capacity.

17。儲存空間對應檔允許建立和修改太大不能放在記憶體的檔案。
       MappedByteBuffer  out = new RandomAccessFile("t.txt'."wr").getChannel().
                                                                                      map(FileChannel.MapMode.READ_WRITE,0,length);

18。JDK1.4引入了檔案加鎖機制。對對應檔部分加鎖。
     FileOutputStream fos = new FileOutputStream("file.txt");
     FileLock fl = fos.getChannel().tryLock();
     if ( f1 !=null )
         {
              ......
             f1.release();
          }
      fos.close();

19。java I/O提供壓縮功能。他們不是從Reader或者Writer派生,而是屬於InputStream,OutputStream
         繼承體系的一部分。這些類是:CheckedOutputStream,DeflaterOutputStream
         ZipOutputStream ,GZipOutputStream和對應的InputStream..

20。java的對象序列化將那些實現了Serializable介面的對象轉化成位元組序列,並能在以後恢複原來的類。
         需要更嚴格的持久性機制可以考慮使用JDO或者想Hibernate之類的工具http://hibernate.sourceforge.net
        transient關鍵字,使某個特定子物件不想讓JAVA的序列化機制自動儲存和恢複。

21。JDK1.4引入了Regex。增強字串處理能力,可以替代StringTokenizer。
         基本類是:模式,Pattern ;匹配器,Matcher。
        更多<<Mastering Reular Expressions>> 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.