欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡單總結(jié)Java IO中stream流的使用方法

 更新時間:2016年03月03日 08:53:58   作者:認(rèn)識Linux  
這篇文章主要介紹了Java IO中stream流的使用方法的簡單總結(jié),包括數(shù)據(jù)流和打印流等Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下


Java語言的輸入輸出功能是十分強(qiáng)大而靈活的,對于數(shù)據(jù)的輸入和輸出操作以“流”(stream)的方式進(jìn)行。J2SDK提供了各種各樣的“流”類,用以獲取不同種類的數(shù)據(jù),定義在包java.io中。程序中通過標(biāo)準(zhǔn)的方法輸入或輸出數(shù)據(jù)。
Java中的流可以從不同的角度進(jìn)行分類:
按照流的方向不同:分為輸入流和輸出流。
按照處理數(shù)據(jù)單位的不同:分為字節(jié)流(8位)和字符流(16位)。
按照功能不同:分為節(jié)點(diǎn)流和處理流。
節(jié)點(diǎn)流:是可以從一個特定的數(shù)據(jù)源(節(jié)點(diǎn))讀寫數(shù)據(jù)的流(例如文件,內(nèi)存)。就像是一條單一的管子接到水龍頭上開始放水。
處理流:是“連接”在已經(jīng)存在的流(節(jié)點(diǎn)流或處理流)之上,通過對數(shù)據(jù)的處理為程序提供更為強(qiáng)大的讀寫功能。就像在已經(jīng)接了一條管子(節(jié)點(diǎn)流)的基礎(chǔ)上,又套上幾個更粗,具有特殊功能的管子(處理流)對流出的水進(jìn)一步的處理。
  
J2SDK所提供的所有位于包java.io內(nèi)的流類型都分別繼承以下四種抽象流類型。

20163384938664.gif (724×139)

四種基本流InputStream,OutputStream,Reader,Writer又分別有更具體的子類,分為文件流,緩沖流,數(shù)據(jù)流,轉(zhuǎn)換流,Print流,Object流等,都分別有特定的功能或用來操作特定的數(shù)據(jù)。其中深顏色的代表節(jié)點(diǎn)流,淺顏色的代表處理流。

這里通過節(jié)點(diǎn)流和處理流總結(jié)一下流的具體用法。
節(jié)點(diǎn)流的分類:

20163385008344.jpg (624×323)

節(jié)點(diǎn)流分別對File(文件),Array(內(nèi)存中的一個數(shù)組),String(字符串),Pipe(管道)進(jìn)行處理。
處理流的分類:

20163385103049.jpg (628×349)

常用的處理流有:緩沖流,轉(zhuǎn)換流,數(shù)據(jù)流,對象流,打印流。
緩沖流:要套接在相應(yīng)的字節(jié)流之上,對讀寫的數(shù)據(jù)提供了緩沖功能,提高了讀寫的效率,同時也增加了一些更方便方法。
緩沖流的作用就像一個桶,原本的字節(jié)流是個水管,水管直接連到目的地,加了緩沖流之后,就是在水管下接了一個桶,等桶接滿水后再倒入目的地。起到了緩沖的作用。這樣就可以一次讀到更多的數(shù)據(jù),避免了頻繁的讀寫硬盤。由于帶了緩沖功能,所以就寫數(shù)據(jù)的時候需要使用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"));//在對寫文件的字節(jié)流上套接上緩沖流 
       BufferedReader br=new BufferedReader(new FileReader("F:\\Java\\IO\\dat.txt"));//在對讀文件的字節(jié)流上套接上緩沖流 
       String s=null; 
       for(int i=1;i<=100;i++){ 
        s=String.valueOf(Math.random());//通過隨機(jī)函數(shù)給s賦值 
        bw.write(s);          //將s寫入到dat.txt文件中 
        bw.newLine();          //寫入一個分行符。緩沖流比較好用的方法就是可以寫入或讀取一行的數(shù)據(jù)。 
       } 
       bw.flush();            //使內(nèi)存中的所有數(shù)據(jù)立刻寫出,不再緩沖。 
       while((s=br.readLine())!=null){  //按行讀取文件內(nèi)容 
        System.out.println(s); 
       } 
       bw.close();            //關(guān)閉處理流同時關(guān)閉里面的節(jié)點(diǎn)流。 
       br.close(); 
       
    } 
    catch(IOException e){ 
       e.printStackTrace(); 
    } 
  } 
} 

轉(zhuǎn)換流:用與字節(jié)數(shù)據(jù)到字符數(shù)據(jù)之間的轉(zhuǎn)化。InputStreamReader需要和InputStream套接,OutputStreamWriter需要和outputStream套接。
數(shù)據(jù)流:DataInputStream 和DataOutputStream  提供將基礎(chǔ)數(shù)據(jù)類型寫入到文件中,或者讀取出來,這個流的用處還是很大的,如果沒有這種流的話,有一個long,本身只占8個字節(jié),如果我要寫入到文件,需要轉(zhuǎn)成字符串,然后在轉(zhuǎn)成字符數(shù)組,那空間會占用很多,但是有了這種流之后就很方便了,直接將這8個字節(jié)寫到文件就可以了,既節(jié)約了內(nèi)存空間也使程序?qū)懫饋砀臃奖愫唵巍5亲x取的時候需要注意了,根據(jù)讀取的數(shù)據(jù)類型,指針會往下移,所以你讀的順序必須要和寫的順序一致才能完成你正確的需求。否則就相當(dāng)與把數(shù)據(jù)拆分了。

import java.io.*; 
public class TestDataStream{ 
   public static void main(String[] args){ 
     ByteArrayOutputStream baos=new ByteArrayOutputStream();  //建一個節(jié)點(diǎn)流。 
     DataOutputStream dos=new DataOutputStream(baos);     //在節(jié)點(diǎn)流上接一根數(shù)據(jù)流“管道”                  try{ 
       dos.writeDouble(Math.random());            //double型 ,占8個字節(jié)  
       dos.writeBoolean(true);                //boolean型,占一個字節(jié) 
       ByteArrayInputStream bais=new ByteArrayInputStream(baos.toByteArray());  
       System.out.println(bais.available());         //輸出流中總的可用字節(jié)數(shù)--9 
       DataInputStream dis=new DataInputStream(bais);    //同樣在輸出流的外面接上數(shù)據(jù)流“管道” 
       System.out.println(dis.readDouble());         //直接讀出double型的數(shù) 
       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");//創(chuàng)建輸出流,指定輸出地點(diǎn) 
       ps=new PrintStream(fos);                      //在流外面包裝打印流 
      }catch(IOException e){ 
       e.printStackTrace(); 
      } 
      if(ps!=null){ 
       System.setOut(ps);                         //將系統(tǒng)的打印設(shè)置成打印流ps 
      } 
      int ln=0; 
      for(char c=0;c<=60000;c++){ 
        System.out.print(c+" ");                     //不在打印到dos窗口,輸出流直接打印到指定文件中 
        if(ln++>=100){ 
           System.out.println();ln=0; 
        } 
      } 
    } 
} 

相關(guān)文章

  • 淺談ArrayList和LinkedList到底誰更快

    淺談ArrayList和LinkedList到底誰更快

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著ArrayList和LinkedList到底誰更快展開,文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06
  • SpringBoot整合minio服務(wù)的示例代碼

    SpringBoot整合minio服務(wù)的示例代碼

    本文主要介紹了SpringBoot整合minio服務(wù)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Springboot集成JSR303參數(shù)校驗(yàn)的方法實(shí)現(xiàn)

    Springboot集成JSR303參數(shù)校驗(yàn)的方法實(shí)現(xiàn)

    這篇文章主要介紹了Springboot集成JSR303參數(shù)校驗(yàn)的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 教你如何使用Java多線程編程LockSupport工具類

    教你如何使用Java多線程編程LockSupport工具類

    在Java工具包中有一個LockSupport工具類,主要負(fù)責(zé)掛起和喚醒線程,這篇文章主要介紹了教你如何使用Java多線程編程LockSupport工具類,需要的朋友可以參考下
    2021-04-04
  • Java多線程之CAS算法實(shí)現(xiàn)線程安全

    Java多線程之CAS算法實(shí)現(xiàn)線程安全

    這篇文章主要介紹了java中如何通過CAS算法實(shí)現(xiàn)線程安全,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,下面小編和大家一起來學(xué)習(xí)一下吧
    2019-05-05
  • springboot程序啟動慢-未配置hostname的解決

    springboot程序啟動慢-未配置hostname的解決

    這篇文章主要介紹了springboot程序啟動慢-未配置hostname的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java使用randomaccessfile在文件任意位置寫入數(shù)據(jù)

    java使用randomaccessfile在文件任意位置寫入數(shù)據(jù)

    Java在文件任意位置寫入數(shù)據(jù)可以使用RandomAccessFile方法來完成,下面看一個簡單的示例就明白了
    2014-01-01
  • JVM?中的?returnAddress過程詳解

    JVM?中的?returnAddress過程詳解

    JVM的畢竟是個虛擬機(jī),是一種規(guī)范,雖說符合馮諾依曼的計算機(jī)設(shè)計理念,但是他并不是實(shí)體計算機(jī),所以他的組成也不是什么存儲器,控制器,運(yùn)算 器,輸入輸出設(shè)備,本文給大家介紹JVM?中的?returnAddress,感興趣的朋友一起看看吧
    2022-04-04
  • Java調(diào)用Oracle存儲過程詳解

    Java調(diào)用Oracle存儲過程詳解

    這篇文章主要介紹了Java調(diào)用Oracle存儲過程詳解的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 6個必備的Java并發(fā)面試種子題目合集

    6個必備的Java并發(fā)面試種子題目合集

    并發(fā)是Java面試的經(jīng)常會考到的知識點(diǎn),這篇文章主要為大家整理了6個必備的Java并發(fā)面試種子題目,文中的示例代碼簡潔易懂,需要的可以學(xué)習(xí)一下
    2023-07-07

最新評論