一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 簡單總結Java IO中stream流的使用方法

簡單總結Java IO中stream流的使用方法

2020-04-07 11:47認識Linux JAVA教程

這篇文章主要介紹了Java IO中stream流的使用方法的簡單總結,包括數據流和打印流等Java入門學習中的基礎知識,需要的朋友可以參考下


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

簡單總結Java IO中stream流的使用方法

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

這里通過節點流和處理流總結一下流的具體用法。
節點流的分類:

簡單總結Java IO中stream流的使用方法

節點流分別對File(文件),Array(內存中的一個數組),String(字符串),Pipe(管道)進行處理。
處理流的分類:

簡單總結Java IO中stream流的使用方法

常用的處理流有:緩沖流,轉換流,數據流,對象流,打印流。
緩沖流:要套接在相應的字節流之上,對讀寫的數據提供了緩沖功能,提高了讀寫的效率,同時也增加了一些更方便方法。
緩沖流的作用就像一個桶,原本的字節流是個水管,水管直接連到目的地,加了緩沖流之后,就是在水管下接了一個桶,等桶接滿水后再倒入目的地。起到了緩沖的作用。這樣就可以一次讀到更多的數據,避免了頻繁的讀寫硬盤。由于帶了緩沖功能,所以就寫數據的時候需要使用flush方法。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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個字節寫到文件就可以了,既節約了內存空間也使程序寫起來更加方便簡單。但是讀取的時候需要注意了,根據讀取的數據類型,指針會往下移,所以你讀的順序必須要和寫的順序一致才能完成你正確的需求。否則就相當與把數據拆分了。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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一次。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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;
        }
      }
    }
}

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 粗了大了 整进去好爽视频 刺激一区仑乱 | 国产一卡 | 日本ccc三级 | 2022国产麻豆剧传媒古装 | 我与岳乱短篇小说 | 麻豆视频入口 | 国产福利不卡视频在免费 | 国产亚洲成归v人片在线观看 | www.精品视频 | 久久99精品久久久久久园产越南 | 女性全身裸露无遮挡 | 国产 国语对白 露脸正在播放 | 厨房play黄瓜进入 | 天天色色色 | 日韩欧美国产综合精品 | 亚洲欧美日韩国产一区图片 | 国产麻豆剧果冻传媒影视4934 | 国产成人亚洲精品91专区手机 | 18videossex性欧美69 | 亚洲 欧美 中文 日韩 另类 | 国产麻豆精品原创 | 国产自拍偷拍自拍 | 俄罗斯毛片免费大全 | 国产精品亚洲精品日韩已方 | 韩国三级日本三级香港三级黄 | 国产福利在线免费观看 | 色综合精品 | 免费aⅴ片 | 亚洲天堂精品在线 | 精品国产品国语在线不卡丶 | 扒开双腿疯狂进出爽爽动态图 | 99年水嫩漂亮粉嫩在线播放 | 天天av天天翘天天综合网 | 久久WWW免费人成一看片 | 日韩一区二区三区精品 | 国产成人亚洲精品91专区手机 | 四虎永久网址影院 | 欧美人人干 | 操美女| 免费精品一区二区三区在线观看 | 日本人成动漫网站在线观看 |