初學者說i/o流

來源:互聯網
上載者:User

今天用一上午的時間看了java流的一些基本知識點。因為在java中流的使用非常高。現在我就輸入和輸出資料流談談自己對流的認識。

       Java的輸入輸出資料流來源於stream(資料流)。其中流分位元組流和字元流。而位元組和字元流都有輸出個輸入和輸出資料流。他們分別是這四個介面。

       InputStream(位元組輸入) outputStream(位元組輸出) reader(字元輸入)  writer(字元輸出)其中四個介面可以派生出不同功能的類。其中輸出資料流有write()方法的三種重載。輸入資料流有read()的三種重載。

一般就介紹幾個常用的幾個輸入輸出類:

Fileinputstream   bufferedinputstream  fileoutstream bufferedoutputstream

fileReader  bufferedreader    filewriter   bufferedwriter

其中buffered的是一種緩衝流,是對流的封裝,使用buffered可以提高輸出輸入的效率。

現在我想用輸入和輸出資料流的列子來更好的說明。

 

 

//利用位元組流向一個檔案寫資料

File file = new File("d:\\fish.txt");

        file.createNewFile();//先建立一個檔案

    OutputStream outputStream = new FileOutputStream(file);//建立一個輸出資料流

        String s = "我叫飛魚";//寫入資料

outputStream.write(s.getBytes());//將資料寫入留中

        outputStream.close();//關閉流

 

 

介紹一個提高效率的寫法

Filefile = new File("d:\\fish.txt");

        file.createNewFile();

        OutputStream outputStream = new FileOutputStream(file);

        BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(outputStream);

        String s = "我叫飛魚";

 

        bufferedOutputStream.write(s.getBytes());

        bufferedOutputStream.close();

兩個實現的功能是一樣的。但是BufferedOutputStream是一種緩衝技術流。可以將資料建立於緩衝數組中。這樣可以提高效率。下面關於輸入輸出資料流我都將用封裝bufferedstream方法來封裝實現。

 

//對一個檔案的內容進行讀取到控制台

InputStreaminputStream=new FileInputStream(new File("d:\\fish.txt"));

         BufferedInputStream bufferedInputStream=new BufferedInputStream(inputStream);

        byte b= (byte)bufferedInputStream.read();

        while(b!=-1){

        System.out.print((char)b);

        b=(byte) bufferedInputStream.read();

        }

bufferedInputStream.close();   

對於這個你一定會出現一個問題那就是漢字會出現亂碼。因為漢字佔兩個位元組,而每次只是輸出一個位元組即半個漢字,自然出亂碼。

//所以下面介紹一種利用字元流進行對檔案的讀取。

  BufferedReader bufferedReader =new BufferedReader(new FileReader(new File("d:\\fish.txt")));

     String s= bufferedReader.readLine();

     while(s!=null){

     System.out.println(s);

     s=bufferedReader.readLine();

     }

    bufferedReader.close();

 

現在的代碼是不是簡練多了。對於java的輸入輸出資料流本身就是採用了一種裝飾者的設計模式。所以第一句這樣寫就簡練多了。

而字元流讀取每次是讀取一行。所以是readline();當然你不閑麻煩也可以read()的。

/

/利用字元流對檔案進行寫內容

BufferedWriterbufferedWriter =new BufferedWriter(new FileWriter(new File("d:\\fish.txt")));

    String s="我是飛魚";  

    bufferedWriter.write(s);

bufferedWriter.close();

 

 

通過這些例子我感覺我覺得已經說的比較清楚了,當然需要一點對java基礎知識的人看。

 

//現在我感覺大概差不多,就做一個從一個檔案複製到另個檔案的練習。我就用字元流做吧。

public static void main(String[] args) throwsException {

        BufferedReader bufferedReader = new BufferedReader(new FileReader(

                new File("d:\\fish.txt")));

        String s = bufferedReader.readLine();

        File file = new File("d:\\fishcopy.txt");

        file.createNewFile();// 建立一個檔案用來存放檔案內容

        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file));

        while (s != null) {

            bufferedWriter.write(s + "\n");

            s = bufferedReader.readLine();

 

        }

        bufferedReader.close();

        bufferedWriter.close();

 

}

 

 

//上述例子都可在eclispe下調通。但是都拋出異常。

 

說了那麼多,給該說說字元流和位元組流的區別了。

我想說一句話就是位元組流比字元流要好。但是字元流讀取方便,可以寫到緩衝區效率高。

但是位元組流應用廣,像視頻圖片音頻都是用位元組流的。所以用位元組流不會失真。

 

還有使用流以後記得要關閉流。

聯繫我們

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