程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 簡略總結Java IO中stream流的應用辦法

簡略總結Java IO中stream流的應用辦法

編輯:關於JAVA

簡略總結Java IO中stream流的應用辦法。本站提示廣大學習愛好者:(簡略總結Java IO中stream流的應用辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是簡略總結Java IO中stream流的應用辦法正文



Java說話的輸出輸入功效是非常壯大而靈巧的,關於數據的輸出和輸入操作以“流”(stream)的方法停止。J2SDK供給了各類各樣的“流”類,用以獲得分歧品種的數據,界說在包java.io中。法式中經由過程尺度的辦法輸出或輸入數據。
Java中的流可以從分歧的角度停止分類:
依照流的偏向分歧:分為輸出流和輸入流。
依照處置數據單元的分歧:分為字撙節(8位)和字符流(16位)。
依照功效分歧:分為節點流和處置流。
節點流:是可以從一個特定的數據源(節點)讀寫數據的流(例如文件,內存)。就像是一條單一的管子接到水龍頭上開端放水。
處置流:是“銜接”在曾經存在的流(節點流或處置流)之上,經由過程對數據的處置為法式供給更加壯大的讀寫功效。就像在曾經接了一條管子(節點流)的基本上,又套上幾個更粗,具有特別功效的管子(處置流)對流出的水進一步的處置。
  
J2SDK所供給的一切位於包java.io內的流類型都分離繼續以下四種籠統流類型。

四種根本流InputStream,OutputStream,Reader,Writer又分離有更詳細的子類,分為文件流,緩沖流,數據流,轉換流,Print流,Object流等,都分離有特定的功效或用來操作特定的數據。個中深色彩的代表節點流,淺色彩的代表處置流。

這裡經由過程節點流和處置流總結一下賤的詳細用法。
節點流的分類:

節點流分離對File(文件),Array(內存中的一個數組),String(字符串),Pipe(管道)停止處置。
處置流的分類:

經常使用的處置流有:緩沖流,轉換流,數據流,對象流,打印流。
緩沖流:要套接在響應的字撙節之上,對讀寫的數據供給了緩沖功效,進步了讀寫的效力,同時也增長了一些更便利辦法。
緩沖流的感化就像一個桶,本來的字撙節是個水管,水管直接連到目標地,加了緩沖流以後,就是在水管下接了一個桶,等桶接滿水後再倒入目標地。起到了緩沖的感化。如許便可以一次讀到更多的數據,防止了頻仍的讀寫硬盤。因為帶了緩沖功效,所以就寫數據的時刻須要應用flush辦法。

import java.io.*; 
public class TestBufferStream{ 
  public static void main(String[] args){ 
    try{ 
       BufferedWriter bw=new BufferedWriter(new FileWriter("F:\\Java\\IO\\dat.txt"));//在對寫文件的字撙節上套接上緩沖流 
       BufferedReader br=new BufferedReader(new FileReader("F:\\Java\\IO\\dat.txt"));//在對讀文件的字撙節上套接上緩沖流 
       String s=null; 
       for(int i=1;i<=100;i++){ 
        s=String.valueOf(Math.random());//經由過程隨機函數給s賦值 
        bw.write(s);          //將s寫入到dat.txt文件中 
        bw.newLine();          //寫入一個分行符。緩沖流比擬好用的辦法就是可以寫入或讀取一行的數據。 
       } 
       bw.flush();            //使內存中的一切數據連忙寫出,不再緩沖。 
       while((s=br.readLine())!=null){  //按行讀取文件內容 
        System.out.println(s); 
       } 
       bw.close();            //封閉處置流同時封閉外面的節點流。 
       br.close(); 
       
    } 
    catch(IOException e){ 
       e.printStackTrace(); 
    } 
  } 
} 

轉換流:用與字節數據到字符數據之間的轉化。InputStreamReader須要和InputStream套接,OutputStreamWriter須要和outputStream套接。
數據流:DataInputStream 和DataOutputStream  供給將基本數據類型寫入到文件中,或許讀掏出來,這個流的用途照樣很年夜的,假如沒有這類流的話,有一個long,自己只占8個字節,假如我要寫入到文件,須要轉成字符串,然後在轉成字符數組,那空間會占用許多,然則有了這類流以後就很便利了,直接將這8個字節寫到文件便可以了,既勤儉了內存空間也使法式寫起來加倍便利簡略。然則讀取的時刻須要留意了,依據讀取的數據類型,指針會往下移,所以你讀的次序必需要和寫的次序分歧能力完成你准確的需求。不然就相當與把數據拆分了。

import java.io.*; 
public class TestDataStream{ 
   public static void main(String[] args){ 
     ByteArrayOutputStream baos=new ByteArrayOutputStream();  //建一個節點流。 
     DataOutputStream dos=new DataOutputStream(baos);     //在節點流上接一根數據流“管道”                  try{ 
       dos.writeDouble(Math.random());            //double型 ,占8個字節  
       dos.writeBoolean(true);                //boolean型,占一個字節 
       ByteArrayInputStream bais=new ByteArrayInputStream(baos.toByteArray());  
       System.out.println(bais.available());         //輸入流中總的可用字節數--9 
       DataInputStream dis=new DataInputStream(bais);    //異樣在輸入流的裡面接上數據流“管道” 
       System.out.println(dis.readDouble());         //直接讀出double型的數 
       System.out.println(dis.readBoolean());        //直接讀出boolean型 
       dos.close(); 
       dis.close(); 
     }catch(IOException e){ 
       e.printStackTrace(); 
     } 
 
   } 
} 

 
打印流:java.io中專門供給用於打印的流,這類流在寫入的時刻有主動flush的功效,所以不須要每打印一個器械都flush一次。

import java.io.*; 
public class TestPrintStream1{ 
    public static void main(String[] args){ 
      PrintStream ps=null; 
      try{ 
       FileOutputStream fos=new FileOutputStream("F:\\Java\\IO\\log.dat");//創立輸入流,指定輸入所在 
       ps=new PrintStream(fos);                      //在流裡面包裝打印流 
      }catch(IOException e){ 
       e.printStackTrace(); 
      } 
      if(ps!=null){ 
       System.setOut(ps);                         //將體系的打印設置成打印流ps 
      } 
      int ln=0; 
      for(char c=0;c<=60000;c++){ 
        System.out.print(c+" ");                     //不在打印到dos窗口,輸入流直接打印到指定文件中 
        if(ln++>=100){ 
           System.out.println();ln=0; 
        } 
      } 
    } 
} 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved