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

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - 深入理解Java IO的flush

深入理解Java IO的flush

2021-05-09 12:47Java之家 Java教程

本篇文章是小編總結的關于Java IO的flush的相關知識點內容,有需要的朋友可以跟著學習下。

java的io是一個大知識點,

如果把它的知識點拆開來說的話估計能說一個星期,關于io的體系可以看看下面這張圖,

深入理解Java IO的flush

接下來我們從一段代碼開始聊吧,先看看下面這段代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public class test {
 public static void main(string[] args) throws exception {
  file file = new file("text.txt");
  if(!file.exists()) {
   file.createnewfile();
  }
  fileoutputstream fos = new fileoutputstream(file);
  bufferedoutputstream bos = new bufferedoutputstream(fos);
  byte[] b = new byte[1024];
  bos.write(b);
  bos.flush();
 }
}

代碼中構造了一個緩沖流,然后往流里寫入一個kb長度的數據,最后調用 flush()方法。

這是很簡單的一段代碼,最終的輸出結果是會生成一個 1kb的 text.text文件。

但如果我們把最后一行注釋掉的話

//bos.flush();

最終生成的 text.text大小會變成0.

這個結果是很顯然的,不過如果我們把 flush()換成 close()的話,結果是不是還會是 0呢?

關于 flush

flush()這個東西,其實在很久以前的網絡傳輸中就有了

那個時候為了效率,服務器和客戶端傳輸數據的時候不會每產生一段數據就傳一段數據

而是會建一個緩沖區,在緩沖區滿之后再往客戶端傳輸數據

深入理解Java IO的flush

有時候會有這樣的問題,當數據不足以填充緩沖區,而又需要往客戶端傳數據,為了解決這個問題,就有了 flush的概念,將緩沖區的數據強迫發送。

回到上面的問題,如果把 flush換成 close是否可行呢

答案是可以的。

如果看源碼就知道 bufferedoutputstream的繼承關系

?
1
public class bufferoutputstream extends filteroutputstream

bufferedoutputstream沒有實現 close()方法,所以會直接調用 filteroutputstream的 close(),而 filteroutputstream的 close()方法會調用 flush()來輸出緩沖區數據。

實際開發中關于io操作的,都強調最后要調用 close()方法,上面的例子就是其中一個原因了。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美精品久久久久久久影视 | 小辣椒精品福利视频导航 | 四虎影视国产精品婷婷 | 九九九国产在线 | 日日操免费视频 | 我们中文在线观看免费完整版 | 欧美色综合高清免费 | 日本视频高清免费观看xxx | 欧美精品色精品一区二区三区 | 午夜 在线播放 | 很很草| 色综合久久六月婷婷中文字幕 | 国产成人高清视频 | 性欧美13处丶14处 | 国产成人亚洲精品乱码在线观看 | 无码人妻丰满熟妇啪啪网不卡 | 精品综合在线 | 精品国语国产在线对白 | 国产精品合集一区二区 | 被老头操| 果冻传媒在线视频观看免费 | 97午夜视频| 香蕉国产成版人视频在线观看 | 成人天堂入口网站 | 女人叉开腿让男人桶 | 满溢游泳池免费 | 国产日产在线观看 | 免费视频完整版在线观看网站 | 亚洲精品视频观看 | 亚洲热图| 亚洲123区| 激情综合 | 亚洲精品国产一区二区三区在 | 91视频夜色| 国产亚洲精品网站 | 男人免费视频 | 国产精品久久久久久久福利院 | 77成人影视 | 亚洲人的天堂男人爽爽爽 | 日本一卡二卡3卡四卡网站精品 | 欧美一区二区三区视视频 |