最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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


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

20163384938664.gif (724×139)

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

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

20163385008344.jpg (624×323)

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

20163385103049.jpg (628×349)

常用的處理流有:緩沖流,轉(zhuǎn)換流,數(shù)據(jù)流,對(duì)象流,打印流。
緩沖流:要套接在相應(yīng)的字節(jié)流之上,對(duì)讀寫(xiě)的數(shù)據(jù)提供了緩沖功能,提高了讀寫(xiě)的效率,同時(shí)也增加了一些更方便方法。
緩沖流的作用就像一個(gè)桶,原本的字節(jié)流是個(gè)水管,水管直接連到目的地,加了緩沖流之后,就是在水管下接了一個(gè)桶,等桶接滿水后再倒入目的地。起到了緩沖的作用。這樣就可以一次讀到更多的數(shù)據(jù),避免了頻繁的讀寫(xiě)硬盤(pán)。由于帶了緩沖功能,所以就寫(xiě)數(shù)據(jù)的時(shí)候需要使用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"));//在對(duì)寫(xiě)文件的字節(jié)流上套接上緩沖流 
       BufferedReader br=new BufferedReader(new FileReader("F:\\Java\\IO\\dat.txt"));//在對(duì)讀文件的字節(jié)流上套接上緩沖流 
       String s=null; 
       for(int i=1;i<=100;i++){ 
        s=String.valueOf(Math.random());//通過(guò)隨機(jī)函數(shù)給s賦值 
        bw.write(s);          //將s寫(xiě)入到dat.txt文件中 
        bw.newLine();          //寫(xiě)入一個(gè)分行符。緩沖流比較好用的方法就是可以寫(xiě)入或讀取一行的數(shù)據(jù)。 
       } 
       bw.flush();            //使內(nèi)存中的所有數(shù)據(jù)立刻寫(xiě)出,不再緩沖。 
       while((s=br.readLine())!=null){  //按行讀取文件內(nèi)容 
        System.out.println(s); 
       } 
       bw.close();            //關(guān)閉處理流同時(shí)關(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ù)類(lèi)型寫(xiě)入到文件中,或者讀取出來(lái),這個(gè)流的用處還是很大的,如果沒(méi)有這種流的話,有一個(gè)long,本身只占8個(gè)字節(jié),如果我要寫(xiě)入到文件,需要轉(zhuǎn)成字符串,然后在轉(zhuǎn)成字符數(shù)組,那空間會(huì)占用很多,但是有了這種流之后就很方便了,直接將這8個(gè)字節(jié)寫(xiě)到文件就可以了,既節(jié)約了內(nèi)存空間也使程序?qū)懫饋?lái)更加方便簡(jiǎn)單。但是讀取的時(shí)候需要注意了,根據(jù)讀取的數(shù)據(jù)類(lèi)型,指針會(huì)往下移,所以你讀的順序必須要和寫(xiě)的順序一致才能完成你正確的需求。否則就相當(dāng)與把數(shù)據(jù)拆分了。

import java.io.*; 
public class TestDataStream{ 
   public static void main(String[] args){ 
     ByteArrayOutputStream baos=new ByteArrayOutputStream();  //建一個(gè)節(jié)點(diǎn)流。 
     DataOutputStream dos=new DataOutputStream(baos);     //在節(jié)點(diǎn)流上接一根數(shù)據(jù)流“管道”                  try{ 
       dos.writeDouble(Math.random());            //double型 ,占8個(gè)字節(jié)  
       dos.writeBoolean(true);                //boolean型,占一個(gè)字節(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中專(zhuān)門(mén)提供用于打印的流,這類(lèi)流在寫(xiě)入的時(shí)候有自動(dòng)flush的功能,所以不需要每打印一個(gè)東西都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)文章

  • JVM雙親委派模型知識(shí)詳細(xì)總結(jié)

    JVM雙親委派模型知識(shí)詳細(xì)總結(jié)

    今天帶各位小伙伴學(xué)習(xí)Java虛擬機(jī)的相關(guān)知識(shí),文中對(duì)JVM雙親委派模型作了非常詳細(xì)的介紹,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • 解決maven啟動(dòng)Spring項(xiàng)目報(bào)錯(cuò)的問(wèn)題

    解決maven啟動(dòng)Spring項(xiàng)目報(bào)錯(cuò)的問(wèn)題

    下面小編就為大家分享一篇解決maven啟動(dòng)Spring項(xiàng)目報(bào)錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • Java 深入淺出講解代理模式

    Java 深入淺出講解代理模式

    代理模式是Java常見(jiàn)的設(shè)計(jì)模式之一。所謂代理模式是指客戶端并不直接調(diào)用實(shí)際的對(duì)象,而是通過(guò)調(diào)用代理,來(lái)間接的調(diào)用實(shí)際的對(duì)象
    2022-03-03
  • springboot使用GuavaCache做簡(jiǎn)單緩存處理的方法

    springboot使用GuavaCache做簡(jiǎn)單緩存處理的方法

    這篇文章主要介紹了springboot使用GuavaCache做簡(jiǎn)單緩存處理的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Java通過(guò)導(dǎo)出超大Excel文件解決內(nèi)存溢出問(wèn)題

    Java通過(guò)導(dǎo)出超大Excel文件解決內(nèi)存溢出問(wèn)題

    導(dǎo)出excel是咱Java開(kāi)發(fā)的必備技能,下面這篇文章主要給大家介紹了關(guān)于Java通過(guò)導(dǎo)出超大Excel文件解決內(nèi)存溢出問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • Java高效讀取大文件實(shí)例分析

    Java高效讀取大文件實(shí)例分析

    這篇文章主要介紹了Java高效讀取大文件實(shí)例分析,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Java基礎(chǔ)之詳解HashSet的使用方法

    Java基礎(chǔ)之詳解HashSet的使用方法

    今天給大家?guī)?lái)的是關(guān)于Java基礎(chǔ)的相關(guān)知識(shí),文章圍繞著HashSet的使用方法展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • SpringBoot如何加載多個(gè)YAML配置文件

    SpringBoot如何加載多個(gè)YAML配置文件

    在Spring?Boot中加載多個(gè)?YAML?配置文件是一個(gè)常見(jiàn)的需求,通常用于將配置信息分離到多個(gè)文件中以便于管理和維護(hù),下面就跟隨小編一起來(lái)看看具體實(shí)現(xiàn)吧
    2025-02-02
  • IDEA的下載和使用安裝詳細(xì)圖文教程

    IDEA的下載和使用安裝詳細(xì)圖文教程

    這篇文章主要介紹了IDEA的下載和使用安裝,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java中的@interface注解使用詳解

    Java中的@interface注解使用詳解

    這篇文章主要介紹了Java中的@interface注解使用詳解,注解@interface不是接口是注解類(lèi),在jdk1.5之后加入的功能,使用@interface自定義注解時(shí),自動(dòng)繼承了java.lang.annotation.Annotation接口,需要的朋友可以參考下
    2023-12-12

最新評(píng)論

宜良县| 绵竹市| 阳信县| 古田县| 光山县| 靖安县| 收藏| 乐昌市| 安远县| 武安市| 水城县| 宁安市| 文山县| 旌德县| 阆中市| 富平县| 宜川县| 女性| 山阴县| 松江区| 将乐县| 德保县| 湖南省| 汉川市| 丹江口市| 全州县| 桂东县| 柳江县| 孟津县| 广西| 景泰县| 武穴市| 潞西市| 武川县| 聊城市| 万山特区| 喜德县| 油尖旺区| 石渠县| 金秀| 衢州市|