簡略總結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; } } } }