JAVA資料流的概述

來源:互聯網
上載者:User

                                          

                                   JAVA資料流的概述

         考慮到資料來源的多樣性,為了有效進行資料的輸入、輸出操作,java中把不同資料來源與程式間的資料轉送都抽像的表述為“流”(Stream),以實現相對統一和簡單的輸入/輸出(Inout/Output,I/O)操作方式。

      下面就看看java資料流的概述:

  

流概述流的分類:

•       按資料流動方向

–   輸入資料流:只能從中讀取位元組資料,而不能向其寫出資料

–   輸出資料流:只能向其寫入位元組資料,而不能從中讀取資料

•       按照流所處理的資料類型

–   位元組流:用於處理位元組資料。

–   字元流:用於處理Unicode字元資料

•       按照流所處理的源

–   節點流:從/向一個特定的IO裝置讀/寫資料的流

–   處理流:對已存在的流進行串連和封裝的流

過濾流

抽象的InputStream和OutputStream類允許我們對字串及數字進行讀寫。為達到這個目的,還需要功能更多的子類。例如:DateInputStream和DataOutputStream允許我們對所有基本的java類型進行讀寫。

    檔案流類與抽象的InputStream和OutputStream類相似,這些類也只支援位元組級的讀寫操作。換言之,只能從fin對象中讀取字元和位元組數組。byteb=fin.read(),他們沒有提供專門的數實值型別,所以DataInputStream沒有辦法從一個檔案中擷取數字。

解決方案:java給流職責分工,某些流(FileInputStream)負責從檔案或另一些更特殊的地方讀入位元組資料。而另一些流

(DataInputStream、PrintWriter)負責將位元組“組裝”成更有用的資料類型。必須綜合運用這兩種流,將其合并成所謂的"過濾流(FilteredStreams)",方法是將一個現成的流傳遞給另一個流的構建器。

資料流

l        DataInputStream

l        DataOutputStream

類的構造及成員詳見文檔

//在檔案中寫入並讀出人名及其工資

import java.io.*;

public class T1 {

    public static void main(String[] args) {

       String[] name = {"Tom","Jack","Mary"};

       double[] salary = {300, 400, 1200};

      

       try{         

           FileOutputStream fos =
new
FileOutputStream("res/salary.txt");

           DataOutputStream dos =
new
DataOutputStream(fos);

          

           for(int i=0; i<name.length; i++){

              dos.writeUTF(name[i]);

              dos.writeDouble(salary[i]);

           }

          

           dos.close();

           fos.close();

          

           ///////////////////////

          

           FileInputStream fin =
new
FileInputStream("res/salary.txt");

           DataInputStream dis =
new
DataInputStream(fin);

          

           for(int i=0; i<name.length; i++){

              String n = dis.readUTF();

              double s = dis.readDouble();

             

              System.out.println(n + " :" + s);

           }

          

           dis.close();

           fin.close();

       }catch(Exception e){

           e.printStackTrace();

       }

    }

}

位元組緩衝流

l        BufferedInputStream

l        BufferedOutputStrem

類的構造及成員詳見文檔

預設情況下,流不會進行緩衝。即每讀一次,都會要求作業系統提供一個位元組。通過BufferedInputStream和

BufferedOutputStream對流構建器進行過濾分層,實現緩衝。

1、建構函式:

BufferedInputStream(InputStream in)    

BufferedInputStream(InputStream in, intsize) //size:緩衝區的大小  

2、代碼示範: 

BufferedInputStream bis=newBufferedInputStream(System.in);   

BufferedInputStream bis=newBufferedInputStream(System.in ,100);  

//用緩衝位元組流實現檔案讀寫

import java.io.*;

public class BufferedIOTest {

    public static void main(String[] args) {

       try{

           FileOutputStream fos =
new
FileOutputStream("res/new.txt");

           BufferedOutputStream bos =
new BufferedOutputStream(fos);

           DataOutputStream dos =
new
DataOutputStream(bos);

          

           dos.writeUTF("goodmorning!");

           dos.writeInt(250);

          

           dos.close();

           bos.close();

           fos.close();

          

           FileInputStream fis =
new
FileInputStream("res/new.txt");

           BufferedInputStream bis =
new BufferedInputStream(fis);

           DataInputStream dis =
new
DataInputStream(bis);

          

           System.out.println(dis.readUTF() + "\n"+ dis.readInt());

          

           dis.close();

           bis.close();

           fis.close();

          

       }catch(Exception e){

           e.printStackTrace();

       }

    }

}

 

聯繫我們

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