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

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

服務(wù)器之家 - 編程語言 - JAVA教程 - 淺析Java.IO輸入輸出流 過濾流 buffer流和data流

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

2020-06-23 11:42Carrol JAVA教程

這篇文章主要介紹了Java.IO輸入輸出流 過濾流 buffer流和data流的相關(guān)資料,本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下

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

字節(jié)流只能一次處理一個(gè)字節(jié),為了更方便的操作數(shù)據(jù),便加入了套接流。

問題引入:

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

不帶緩沖的操作,每讀一個(gè)字節(jié)就要寫入一個(gè)字節(jié)。

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

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

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

這就是兩者的區(qū)別。

大概過程:

沒有緩存區(qū),那么每read一次,就會(huì)發(fā)送一次IO操作;

有緩存區(qū),第一次read時(shí),會(huì)一下讀取x個(gè)字節(jié)放入緩存區(qū),然后后續(xù)的read都會(huì)從緩存中讀取,當(dāng)read到緩存區(qū)末尾時(shí),會(huì)再次讀取x個(gè)字節(jié)放入緩存區(qū)。

很明顯,第二種方式,會(huì)減少IO操作,效率更高,缺點(diǎn)就是,內(nèi)存占用的多。

java輸入輸出流采用了多層封裝的方式進(jìn)行設(shè)計(jì)

  最底層 InputStream和OutputStream 基于字節(jié)流,沒有緩存機(jī)制,一般用BufferInputStream和BufferOutputStream進(jìn)行封裝后使用。

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

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

  還有個(gè)比較好用的PrintStream 和PrintWriter相似 可以自動(dòng)刷新 只不過是對(duì)于字節(jié)流而言。

  字節(jié)流一般用于傳送二進(jìn)制文件之類 至于字符流常常用reader進(jìn)行包裝后使用。

  最常用的有BufferInputStreamReader和PrintWrinter ,BufferInputStreamReader的readline方法很實(shí)用 遇到\r\d會(huì)自動(dòng)flush。

  PrintWrinter 只要在構(gòu)造函數(shù)中設(shè)置了刷新屬性為true則其println方法可以自動(dòng)刷新不用flush。

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

  對(duì)于buffer流,只有緩沖區(qū)滿時(shí),才會(huì)將數(shù)據(jù)真正到輸出流,但可以使用flush()方法人為的將尚未填滿的緩沖區(qū)中的數(shù)據(jù)送出;不能確定文件的編碼方式,在網(wǎng)絡(luò)上難以應(yīng)用。

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

  DataInputStream和DataOutputStream:可以接受一行的數(shù)據(jù),可以對(duì)其進(jìn)行編碼,也可以是套接流,可以套接文件字節(jié)流和網(wǎng)絡(luò)字節(jié)流,讀寫的順序要一致,否則讀取會(huì)出現(xiàn)異常。

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

以上所述是小編給大家介紹的Java.IO輸入輸出流 過濾流 buffer流和data流,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)服務(wù)器之家網(wǎng)站的支持!

原文鏈接:http://www.cnblogs.com/Carrol/archive/2016/10/13/5954941.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 性色香蕉AV久久久天天网 | 草莓香蕉榴莲丝瓜秋葵绿巨人在线看 | 99精品99| 日本一卡二卡3卡四卡无卡网址 | 国产91无毒不卡在线观看 | 毛片免费全部免费观看 | 日韩毛片基地一区二区三区 | 特黄a大片免费视频 | 天堂a视频 | 美女被爆操 | 无人影院在线播放 | 91短视频在线观看2019 | 天天干天天日天天射天天操毛片 | 亚洲另类中文字幕 | 免费一级欧美片在线观免看 | 隔壁老王国产精品福利 | 午夜福利试看120秒体验区 | 公园暴露娇妻小说 | 国产剧情麻豆刘玥视频 | 欧美日韩精品一区二区三区视频在线 | 高清一区二区 | 日本加勒比无码av | 国产午夜久久精品 | 免费一级国产生活片 | 高h生子双性美人受 | 麻豆网| 国产靠逼视频 | 美女禁区视频免费观看精选 | 国产一区二区播放 | 欧美成人v视频免费看 | 2020最新韩国理论三级0k | 国产视频99 | 亚洲黄色网页 | 亚洲国产精品成人久久 | 亚洲高清国产拍精品动图 | 香蕉成人国产精品免费看网站 | 欧美一级片观看 | 四虎国产成人亚洲精品 | 欧美肥胖老妇做爰变态 | 色综合久久综精品 | 午夜精品在线视频 |