国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

淺析Java.IO輸入輸出流 過濾流 buffer流和data流

2019-11-26 13:42:56
字體:
來源:轉載
供稿:網友

java.io使用了適配器模式裝飾模式等設計模式來解決字符流的套接和輸入輸出問題。

字節流只能一次處理一個字節,為了更方便的操作數據,便加入了套接流。

問題引入:

緩沖流為什么比普通的文件字節流效率高?

不帶緩沖的操作,每讀一個字節就要寫入一個字節。

由于涉及磁盤的IO操作相比內存的操作要慢很多,所以不帶緩沖的流效率很低。

帶緩沖的流,可以一次讀很多字節,但不向磁盤中寫入,只是先放到內存里。

等湊夠了緩沖區大小的時候一次性寫入磁盤,這種方式可以減少磁盤操作次數,速度就會提高很多!

這就是兩者的區別。

大概過程:

沒有緩存區,那么每read一次,就會發送一次IO操作;

有緩存區,第一次read時,會一下讀取x個字節放入緩存區,然后后續的read都會從緩存中讀取,當read到緩存區末尾時,會再次讀取x個字節放入緩存區。

很明顯,第二種方式,會減少IO操作,效率更高,缺點就是,內存占用的多。

java輸入輸出流采用了多層封裝的方式進行設計

  最底層 InputStream和OutputStream 基于字節流,沒有緩存機制,一般用BufferInputStream和BufferOutputStream進行封裝后使用。

  BufferInputStream的read方法是阻塞線程的,BufferInputStream.read(buf) 會將輸入流內的全部讀入buf之后才返回。

  BufferOutputStream.write(buf);會將buf中的內容輸出到輸出流,但是記得要flush;

  還有個比較好用的PrintStream 和PrintWriter相似 可以自動刷新 只不過是對于字節流而言。

  字節流一般用于傳送二進制文件之類 至于字符流常常用reader進行包裝后使用。

  最常用的有BufferInputStreamReader和PrintWrinter ,BufferInputStreamReader的readline方法很實用 遇到/r/d會自動flush。

  PrintWrinter 只要在構造函數中設置了刷新屬性為true則其println方法可以自動刷新不用flush。

FilterInputStream和FilterOutputStream:過濾流,buffer流和data流均繼承于此。

  對于buffer流,只有緩沖區滿時,才會將數據真正到輸出流,但可以使用flush()方法人為的將尚未填滿的緩沖區中的數據送出;不能確定文件的編碼方式,在網絡上難以應用。

  實際中用的最多的還是:data流可以讓發送方和接收方按照同一的編碼去處理。

  DataInputStream和DataOutputStream:可以接受一行的數據,可以對其進行編碼,也可以是套接流,可以套接文件字節流和網絡字節流,讀寫的順序要一致,否則讀取會出現異常。

  DataInputStream 是用來裝飾其它輸入流,它“允許應用程序以與機器無關方式從底層輸入流中讀取基本 Java 數據類型”。應用程序可以使用DataOutputStream(數據輸出流)寫入由DataInputStream(數據輸入流)讀取的數據。

以上所述是小編給大家介紹的Java.IO輸入輸出流 過濾流 buffer流和data流,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 铁力市| 道孚县| 扎赉特旗| 娱乐| 保德县| 山东| 桂阳县| 汝城县| 乐清市| 易门县| 天镇县| 乐安县| 赫章县| 泊头市| 玉山县| 商城县| 广南县| 吐鲁番市| 陇西县| 涞源县| 湟源县| 辰溪县| 永吉县| 北碚区| 漳浦县| 三都| 溧阳市| 吴川市| 彝良县| 海兴县| 两当县| 彭州市| 云南省| 桓仁| 寻甸| 苏州市| 灵武市| 同江市| 伊金霍洛旗| 滕州市| 紫金县|