Java 輸入輸出資料流

來源:互聯網
上載者:User

1.
在Java中如何讀寫資料?什麼是資料流(stream)?

你必須使用Java I/O 類建立一個對象然後調用類中的方法來讀寫資料。一個Java  I/O對象叫做資料流。讀取資料的對象叫做輸入資料流,寫入資料的對象叫做輸出資料流。

2.
在Java中,字元是如何在記憶體中表示的,是如何在文字檔中表示的?

在記憶體中用Unicode編碼來表示字元,在文字檔中用一種指定的編碼方案來表示字元,如果沒有指定編碼方案,就用系統預設的編碼方案。

3.
文本輸入資料流read()方法的傳回值是什嗎?這就是它在文字檔中儲存的值嗎?

read()方法返回的是字元的統一碼,儲存在文字檔中的實際值可能不是統一碼,

注:Java程式使用的是統一碼(Unicode).從FileReader流中讀入一個字元時,返回該字元的同一碼。字元在檔案中的編碼可能不是統一碼,Java自動地將它轉化為統一碼。向FileWriter流中寫入流中寫入字元時,Java自動地將統一碼轉化為檔案制定的編碼。也就是說Java程式操作的是統一碼,而檔案中不一定是統一碼,所以從檔案中讀入字元時,要先轉化為統一碼,往檔案寫入字元時要先將統一碼轉化為檔案指定的編碼方案。

4.
如何使用FileReader建立一個輸入資料流?當檔案不存在時,將出現什麼現象?如何使用FileWriter建立輸出資料流?當檔案存在時會出現什麼情況?可以給一個已存在的檔案添加資料嗎?

   有兩種方法使用FileReader建立輸入資料流:FileReader(File file)和FileReader(String fileName)

當檔案不存在時會拋出ClassNotFoundException

   有四個構造方法用來建立FileWriter對象:

   public FileWriter(File file)

   public FileWriter(Sting fileName)

   public FileWriter(File file,boolean append)

   public FileWriter(String fileName,boolean append)

如果檔案不存在將會建立一個新檔案,如果檔案已經存在,則前兩個構造方法將會刪除檔案的現有內容。要想保留當前的檔案內容並追加新的資料,使用後面兩個構造方法並把它們的參數append設為ture.

5.
在Java IO程式中,為什麼必須在方法中聲明拋出異常IOException,或者在try-catch塊中處理該異常?

Java I/O 類中除了PrintWriter和PrintStream之外所有的方法和構造器都會拋出IOException,因為它們通常會發生不期望的狀況。                                  

6.
在FileWriter對象上使用write("91")方法,寫到檔案中的是什嗎?

        這個方法是往檔案中寫入字串,根據檔案中指定的編碼方案將字元'9'和'1' 進行轉換。

7.
為什麼總是要求關閉資料流?

      有兩個原因:一.關閉流確保資料將會被寫入到檔案中

                  二.關閉流可以釋放資料流對象所要求的資源

8.
使用BufferedReader類和BufferedWriter類的好處?

          BufferedReader類和BufferedWriter類通過減少讀寫次數來加快輸入輸出的速度。緩衝區資料流使用一個類似快取器作用的字元數組。輸入時,數組成塊地把字元讀入緩衝區,然後再從緩衝區讀取單個字元。輸出時,數組累積字元組織成塊,然後再整塊寫入到輸出資料流中。

          如果沒有指定緩衝區的大小,預設大小是8192個字元。緩衝區輸入資料流在每次讀操作中把儘可能多的資料讀入到緩衝區。相反,緩衝區輸出資料流只有當它的緩衝區已滿或調用flush()方法時才調用寫入檔案的方法。

9.
什麼時候應該使用PrintWriter和PrintStream?如何建立一個PrintWriter對象?System.in、 System.out、System.err使用什麼類型的資料?調用System.out.prinltn()時,為什麼不必將它放入try-catch方法中?

      PrintWriter類和PrintStream類可以將對象、字串和數值以文本的方式輸出。數值、字元或布爾值轉換成字串並列印到輸出資料流。列印一個對象就是列印該對象調用toString() 返回描述字串。

      System.in,System.out,System.err的類型是PrintStream,PrintWriter和PrintStream不會拋出IOException,所以調用System.out.println()方法時,不必將它放入try-catch塊

10.
位元組流和字元流的區別是什嗎?

        位元組流從檔案中讀入位元組然後直接將它複製到記憶體中不需要任何的轉換,相反,字元流要求編碼和反編碼。Java虛擬機器將一個統一碼轉換為檔案指定的編碼當寫入一個字元時,當讀入一個字元時將檔案中指定的編碼轉換為統一碼。

11.
InputStream讀取位元組,為什麼read()方法返回int值而不是位元組?InputStream和OutPutStream中的抽象方法有哪些?

        read()方法返回的是0到255範圍內的int位元組數。

        InputStream的抽象方法只有read()

        OutputStream的抽象方法只有write(int b)

12.
FileInputStream類和FileOutputStream類引進了哪些新方法?如何建立FileInputStream和FileOutputStream對象?

       

FileInputStream/FileOutputStream中所有的方法都是從InputStream/OutPutStream中繼承的。

建立一個FileInputStream對象可以這樣:

public FileInputStream(File file)

public FileInputStream(String name)

建立一個FileOutputStream對象可以這樣:

public FileOutputStream(File file)

public FileOutputStream(String name)

public FileOutputStream(File file,boolean append)

public FIleOutputStream(String name,boolean append)

10.
在FileOutputStream中調用writeByte(91)方法後,寫入檔案的是什嗎?

       91表示的1個位元組數,用十六製表示是0x5B,用二進位表示就是
01011011 

13.
在二進位輸入資料流(FileInputStream和DataInputStream)中,如何判斷是否已經達到檔案尾?

       如果沒有位元組可讀則表示達到檔案尾,我們使用available()方法來判斷,當

stream.available()= = 0則表示達到了檔案尾

 

整體把握:

I/O分為兩大類:文本輸入輸出和二進位輸入輸出

文本輸入輸出:

 


文字檔和二進位檔案

在文本中儲存的資料是以人能讀懂的方式表示的,而二進位檔案中儲存的資料是用二進位形式來表示的。人讀不懂二進位檔案,它們是為程式讀取而設計的。例如,Java來源程式儲存在文字檔中,可以使用文字編輯器閱讀,但是Java的類儲存在二進位檔案中,使用Java虛擬機器閱讀。

 


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.