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

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

 更新時間:2016年10月14日 11:47:58   作者:Carrol  
這篇文章主要介紹了Java.IO輸入輸出流 過濾流 buffer流和data流的相關(guān)資料,本文給大家介紹的非常詳細(xì),具有參考借鑒價值,需要的朋友可以參考下

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

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

問題引入:

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

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

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

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

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

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

大概過程:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  DataInputStream和DataOutputStream:可以接受一行的數(shù)據(jù),可以對其進(jìn)行編碼,也可以是套接流,可以套接文件字節(jié)流和網(wǎng)絡(luò)字節(jié)流,讀寫的順序要一致,否則讀取會出現(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流,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • java靜態(tài)代理的含義及用法

    java靜態(tài)代理的含義及用法

    在本篇文章里小編給大家整理的是一篇關(guān)于java靜態(tài)代理的含義及用法,有需要的朋友們可以跟著學(xué)習(xí)參考下。
    2021-06-06
  • Java局部內(nèi)部類原理與用法實例分析

    Java局部內(nèi)部類原理與用法實例分析

    這篇文章主要介紹了Java局部內(nèi)部類原理與用法,結(jié)合實例形式分析了Java局部內(nèi)部類功能、用法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-09-09
  • SpringBoot通過ip獲取歸屬地的幾種方式分享

    SpringBoot通過ip獲取歸屬地的幾種方式分享

    在日常我們逛網(wǎng)站的時候會發(fā)現(xiàn)我們登錄后會出現(xiàn)歸屬地信息,例如:我在廣州登錄會顯示廣東廣州,有些更加精確的會顯示到區(qū)縣,那么我們來看看有哪些方式來獲取歸屬地信息,今天我們來聊一聊
    2023-09-09
  • 繼承WebMvcConfigurationSupport后自動配置不生效及如何配置攔截器

    繼承WebMvcConfigurationSupport后自動配置不生效及如何配置攔截器

    這篇文章主要介紹了繼承WebMvcConfigurationSupport后自動配置不生效及如何配置攔截器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Spring?cloud?實現(xiàn)房源查詢功能的實例代碼

    Spring?cloud?實現(xiàn)房源查詢功能的實例代碼

    這篇文章主要介紹了Spring?cloud?實現(xiàn)房源查詢功能,本項目是一個多模塊項目,創(chuàng)建一個 Spring Initializr 項目 不自動添加依賴項,完成創(chuàng)建后刪除自帶的src目錄,并在根目錄下創(chuàng)建新的maven模塊,需要的朋友可以參考下
    2022-09-09
  • Java后臺線程操作示例【守護(hù)線程】

    Java后臺線程操作示例【守護(hù)線程】

    這篇文章主要介紹了Java后臺線程操作,結(jié)合實例形式分析了java守護(hù)線程相關(guān)原理、操作技巧與使用注意事項,需要的朋友可以參考下
    2019-09-09
  • springmvc如何進(jìn)行異常處理

    springmvc如何進(jìn)行異常處理

    這篇文章主要介紹了springmvc如何進(jìn)行異常處理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • springboot如何實現(xiàn)前后端分離跨域訪問

    springboot如何實現(xiàn)前后端分離跨域訪問

    這篇文章主要介紹了springboot如何實現(xiàn)前后端分離跨域訪問問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 使用idea插件進(jìn)行java代碼生成的操作

    使用idea插件進(jìn)行java代碼生成的操作

    這篇文章主要介紹了使用idea插件進(jìn)行java代碼生成的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Java使用字節(jié)流復(fù)制文件的方法

    Java使用字節(jié)流復(fù)制文件的方法

    這篇文章主要為大家詳細(xì)介紹了Java使用字節(jié)流復(fù)制文件的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05

最新評論