中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2022-01-06 16:40:04 來源:億速云 閱讀:123 作者:iii 欄目:互聯網科技

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

BFOS 的構造需要傳入一個字節輸出流。

基本用法

這個流的功能可以根據名字看出來,是一個緩沖輸出流,可以當做一個緩沖區,將輸出的字節暫時存在緩沖區里,那么當緩沖區滿了之后干嘛呢?那就需要將緩沖的數據都刷出去,刷到另一個流,因此在構造的時候就需要傳入一個流。

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

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

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

完整示例如下,這里我們的下游流用了個內存數組流,并隨時查看內存數組流的數據量。

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

運行結果:

0
8192
8195

之前介紹過列式存儲文件格式:大數據的列式存儲格式:Parquet

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

單緩沖區

假如我們在內存中只需要維護一個緩沖區的數據,即一個字節數組。當我們想寫磁盤時,需要將 FOS 包裝一層 BAOS 或 BFOS,為了防止過多小數據量的寫操作,因此在內存中做個緩沖,將很多小數據量寫操作轉化成很少的大數據量寫操作,充分利用磁盤的IO。

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

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

BufferedOutputStream + FileOutputStream

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

ByteArrayOutputStream + FileOutputStream

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

結果:BFOS + FOS 勝出。

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

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

多緩沖區

假如內存中需要維護多個緩沖區,每份緩沖區負責不同的數據,對應到列式存儲中就是兩列,都需要寫到一個文件中,那么 BFOS+FOS 和 BAOS+FOS 這兩種搭配有啥區別?

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

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

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

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

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

“java緩沖輸出流的方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永泰县| 河西区| 平遥县| 延长县| 读书| 五大连池市| 乐都县| 华蓥市| 出国| 怀化市| 资源县| 开鲁县| 儋州市| 永年县| 建宁县| 宾川县| 偏关县| 遂平县| 全州县| 塘沽区| 手机| 且末县| 河曲县| 铁岭市| 伊春市| 肇州县| 延寿县| 交城县| 乳源| 永川市| 江门市| 利辛县| 普兰店市| 鲜城| 阳新县| 宁晋县| 毕节市| 启东市| 姚安县| 新昌县| 玛纳斯县|