java緩沖輸出流的方法是什么

本篇內(nèi)容介紹了“java緩沖輸出流的方法是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)公司主營息縣網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都APP應(yīng)用開發(fā),息縣h5微信小程序開發(fā)搭建,息縣網(wǎng)站營銷推廣歡迎息縣等地區(qū)企業(yè)咨詢

BFOS 的構(gòu)造需要傳入一個字節(jié)輸出流。

基本用法

這個流的功能可以根據(jù)名字看出來,是一個緩沖輸出流,可以當(dāng)做一個緩沖區(qū),將輸出的字節(jié)暫時存在緩沖區(qū)里,那么當(dāng)緩沖區(qū)滿了之后干嘛呢?那就需要將緩沖的數(shù)據(jù)都刷出去,刷到另一個流,因此在構(gòu)造的時候就需要傳入一個流。

有點類似游泳池,水滿了,就將水全部放掉,再灌新水。為了將水放掉,就需要給一個輸出的目的地,這個目的地就是構(gòu)造方法中需要傳入的下游的輸出流。其默認(rèn)的緩沖區(qū)大小是 8KB。

java緩沖輸出流的方法是什么

注意這個過程,當(dāng)寫到8KB時,數(shù)據(jù)還存在 BFOS 中,只要再寫一個字節(jié),就將之前緩沖滿的全部刷出去。如果緩沖區(qū)還沒滿就想將數(shù)據(jù)寫出去,需要手動 flush。

完整示例如下,這里我們的下游流用了個內(nèi)存數(shù)組流,并隨時查看內(nèi)存數(shù)組流的數(shù)據(jù)量。

java緩沖輸出流的方法是什么

運行結(jié)果:

0
8192
8195

之前介紹過列式存儲文件格式:大數(shù)據(jù)的列式存儲格式:Parquet

每一列的數(shù)據(jù)需要在內(nèi)存中用一個緩沖區(qū)管理,如果文件只有一列,那就需要一個緩沖區(qū),如果文件有多列,則需要多個緩沖區(qū)。在這里我們用單緩沖區(qū)多緩沖區(qū)來區(qū)分。之前我們的緩沖區(qū)用的是 BAOS,參考 java 字節(jié)流入門(內(nèi)存數(shù)組流->文件流)。那用 BFOS 可不可以?

單緩沖區(qū)

假如我們在內(nèi)存中只需要維護(hù)一個緩沖區(qū)的數(shù)據(jù),即一個字節(jié)數(shù)組。當(dāng)我們想寫磁盤時,需要將 FOS 包裝一層 BAOS 或 BFOS,為了防止過多小數(shù)據(jù)量的寫操作,因此在內(nèi)存中做個緩沖,將很多小數(shù)據(jù)量寫操作轉(zhuǎn)化成很少的大數(shù)據(jù)量寫操作,充分利用磁盤的IO。

先比比速度,BFOS+FOS vs BAOS + FOS (內(nèi)存中只維護(hù)一個 BAOS 或一個 BFOS ,并接一個文件輸出流)哪種比較快?

做了個實驗,將800M數(shù)據(jù)通過兩種方式寫到文件中:

BufferedOutputStream + FileOutputStream

java緩沖輸出流的方法是什么

ByteArrayOutputStream + FileOutputStream

java緩沖輸出流的方法是什么

結(jié)果:BFOS + FOS 勝出。

java緩沖輸出流的方法是什么

BFOS 比 BAOS 還有一個好處,那就是可以控制內(nèi)存使用,不會無限制占用內(nèi)存。這是在單個數(shù)據(jù)緩沖區(qū)的時候,即內(nèi)存中只有一份緩沖數(shù)據(jù)。

多緩沖區(qū)

假如內(nèi)存中需要維護(hù)多個緩沖區(qū),每份緩沖區(qū)負(fù)責(zé)不同的數(shù)據(jù),對應(yīng)到列式存儲中就是兩列,都需要寫到一個文件中,那么 BFOS+FOS 和 BAOS+FOS 這兩種搭配有啥區(qū)別?

由于 BFOS 的刷文件是由緩沖區(qū)滿觸發(fā)的,我們用橙色和紅色區(qū)分兩個緩沖流。假如緩沖流的緩沖區(qū)大小為 8KB,每個緩沖流都接收了 24KB 的數(shù)據(jù),但是數(shù)據(jù)并不是均勻來的,因此刷到文件中的順序是不固定的,也就是每個流會隨機觸發(fā) 3 次 flush。圖中 File 里每一小段是 8KB。兩個流最多需要的內(nèi)存是 16KB。

java緩沖輸出流的方法是什么

而使用 BAOS + FOS,假如需要明確將紅黃兩種數(shù)據(jù)分開存儲,不能互相交叉,則最多需要在內(nèi)存中緩存 48KB 數(shù)據(jù),等一個流緩沖了 24KB 后再寫文件。這樣就可以將紅黃兩種數(shù)據(jù)分隔開,但是先后順序不確定。

java緩沖輸出流的方法是什么

如果將紅黃分開是功能要求,在這種場景下,就必須使用 BAOS。

“java緩沖輸出流的方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

當(dāng)前標(biāo)題:java緩沖輸出流的方法是什么
當(dāng)前URL:http://bm7419.com/article46/pcdieg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器網(wǎng)站內(nèi)鏈、企業(yè)建站、網(wǎng)頁設(shè)計公司建站公司、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)