java中流的注意事項

來源:互聯網
上載者:User

標籤:zab   stat   輸入   不用   過濾   取出   system   static   aio   

緩衝流

緩衝流繼承自過濾流,使用緩衝流時一些要注意的知識點:

1.如果在緩衝流對象建立時使用了其他流,最後關閉時只需關閉緩衝流就可以了,其他流會跟著自動關閉。

2.緩衝字元輸入資料流(BufferedReader)可以直接 readLine() 一次讀取一行,BufferedInputStream沒有此方法。

3.用BufferedInputStream讀取檔案結束時返回的是-1,這和File流相同,不過如果使用BufferedReader的ReadLine()方法,讀取到最後,返回的是null。

3.在使用緩衝輸出資料流(BufferedOutputStream)(BufferedWriter)後,最好調用 out.flush() 方法,來強制寫出剩餘資料,清空緩衝區。

4.其實 BufferedInputStream 內部就是對一個 byte 數組的封裝,這和我們自己建立 byte 數組作為緩衝區的效果是相同的。它們的特點都是不用每讀一個位元組就輸出一次,而是一次性讀了一點量的資料,再一個一個的輸出,減少了IO與系統的互動次數,提高了效率。

5.可以用BufferedReader(字元緩衝流)結合InputStreamReader(轉換流)對位元組流進行讀取,可以大幅提高效率。

6.如果使用buffererReader和BufferedWriter結合使用,在讀寫檔案時,一次讀取一行再寫入,這時要手動設定換行,可以調用bw.newLine()方法換行(不要忘記flush)。更方便的做法是使用PrinterWriter(列印輸出資料流)來輸出,它可以直接使用pw.println(line)方法自動換行。

 

 

資料流

資料流一般都是用來對檔案流進行封裝,使得在寫一些資料時可以節省使用的位元組空間,在讀取這些資料時也避免了一些繁瑣的轉換操作。比如我們要向檔案中寫一個 double 型的資料,一個 int 型的資料和一個 String 型的資料,然後再讀取出來。那麼就可以這樣寫

public class DataIODemo {    public static void main(String[] args) {            int i=100;            double pi=Math.PI;  //這個是圓周率            String s="java";            DataOutputStream out=null;            DataInputStream in=null;            try {                out=new DataOutputStream(new FileOutputStream("test.dat"));                out.writeInt(i);     //寫入int型資料                out.writeDouble(pi);  //寫入double型資料                out.writeUTF(s);      //寫入字串                                in=new DataInputStream(new FileInputStream("test.dat"));                int j=in.readInt();      //從檔案中讀取int型資料                double db=in.readDouble();    //從檔案中讀取double型資料                String str=in.readUTF();      //從檔案中讀取字串                System.out.println(j+" "+db+" "+str);            } catch (IOException e) {                e.printStackTrace();            }finally {                try {                    in.close();                    out.close();                } catch (IOException e) {                    e.printStackTrace();                }            }    }}

 

讀出的結果為

100 3.141592653589793 java

 

使用資料流進行資料存放區時,都是將資料轉換成2進位儲存的,不過不同資料類型儲存的位元組大小不同,所以取出資料時,要用不同的read方法來讀取。比如我這裡儲存的順序是先儲存一位int型,再儲存一個double型,最後儲存一個字串,讀出的時候必須也按照同樣的順序來讀,不然會 出現錯誤,這是因為每次read後,它的指標位置都會向後移動一定位元,如果用readInt(),它會讀取四個位元組的資料,然後指標移動到四個位元組之後,然後使用readDouble()再讀取,指標再移動,一直這樣讀。如果把讀的順序改變,就會變成用讀String字串的方法來讀double型資料,產生錯誤。

 

物件流程

1.使用物件流程可以將一個對象進行序列化,然後進行傳輸 或者 儲存到檔案中,同樣物件流程可以對對象還原序列化進行還原。

2.物件流程只有ObjectInputStream 和ObjectOutputStream兩種,因為資料在硬碟中都是以位元組方式儲存的,故對象想要在底層傳輸,就必須轉換為位元組。

3.對象想要進行序列換和還原序列化,必須實現Serializable介面,Serializable介面為一個空介面,主要是起到標識作用。此外,對象還要進行建構函式的建立,以及實現toString()方法等一系列操作。

4.如果對象中的某個成員變數不想進行序列化,可以在變數的類型前加上 transient 關鍵字。

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.