最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決InputStream.available()獲取流大小問題

 更新時間:2023年06月20日 16:46:38   作者:碼農(nóng)的進階之路  
這篇文章主要介紹了解決InputStream.available()獲取流大小問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

InputStream.available()獲取流大小問題

近日在學習IOUtils時,模擬從網(wǎng)絡上讀取數(shù)據(jù)存放到本地磁盤,想使用InputStream.available()查看流的大小,結果發(fā)現(xiàn)得到的大小跟實際生成文件的大小不一致。

上代碼:

InputStream in = new URL("http://www.apache.org").openStream(); ?
System.out.println(in.available());?
FileOutputStream out = new FileOutputStream("F://1.html"); ?
//這里返回的i可以認為是流的大小
int i = IOUtils.copy(in, out);?
System.out.println(i); ?
IOUtils.closeQuietly(out);?
IOUtils.closeQuietly(in);?

輸出結果:

10660
60787

很顯然,按照我們之前的理解,這兩個輸出得到的數(shù)據(jù)應該是一樣的。后一個輸出的文件大小是沒有問題的,寫入到硬盤上就是那么多字節(jié)。那么前一個輸出的問題到底在哪呢?

通過查看api,發(fā)現(xiàn)了些端倪。該方法的描述是這樣的:返回可以不受阻塞地從此文件輸入流中讀取的字節(jié)數(shù)

如上,由于是從網(wǎng)絡中獲取數(shù)據(jù),由于存在著網(wǎng)絡延遲等因素,所以也就不難理解 兩次輸出不一致了。

當然,如果是讀取本地文件的話,這個方法返回的數(shù)據(jù)大小一般是真實的。因此,如何使用以及要不要用這個方法,得根據(jù)具體的場景

若想獲取網(wǎng)絡中流的總大小,可以借助URLConnection方法

URLConnection openConnection = new URL("http://www.apache.org").openConnection();?
System.out.println(openConnection.getContentLength());

InputStream.available()使用大坑

問題場景

文件下載功能,需要對原來的文件進行讀取再輸出到文件或瀏覽器中,會常用到InputStream.available()方法。

經(jīng)歷過一次系統(tǒng)功能變更升級,需要將文件先下載到本地再響應出去,發(fā)現(xiàn)下載的文件不全

百思不得其解,搜索好久資料,查找得知,以備忘記

這個方法可以在讀寫操作前先得知數(shù)據(jù)流里有多少個字節(jié)可以讀取。

  • 需要注意的是,如果這個方法用在從本地文件讀取數(shù)據(jù)時,一般不會遇到問題,
  • 但如果是用于網(wǎng)絡操作,就經(jīng)常會遇到一些麻煩。比如,Socket通訊時,
  • 對方明明發(fā)來了1000個字節(jié),但是自己的程序調(diào)用available()方法卻只得到900,
  • 或者100,甚至是0,感覺有點莫名其妙,怎么也找不到原因。
  • 其實,這是因為網(wǎng)絡通訊往往是間斷性的,一串字節(jié)往往分幾批進行發(fā)送。
  • 本地程序調(diào)用available()方法有時得到0,這可能是對方還沒有響應,也可能是對方已經(jīng)響應了,
  • 但是數(shù)據(jù)還沒有送達本地。對方發(fā)送了1000個字節(jié)給你,也許分成3批到達,
  • 這你就要調(diào)用3次available()方法才能將數(shù)據(jù)總數(shù)全部得到。

所以在進行網(wǎng)絡數(shù)據(jù)傳輸時候,不能使用InputStream.available(),這個方法導致系統(tǒng)出現(xiàn)長時間暫停狀態(tài)

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 一篇文章帶你入門java方法

    一篇文章帶你入門java方法

    這篇文章主要介紹了java基礎之方法詳解,文中有非常詳細的代碼示例,對正在學習java基礎的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-08-08
  • Java JConsole遠程連接配置案例詳解

    Java JConsole遠程連接配置案例詳解

    這篇文章主要介紹了Java JConsole遠程連接配置案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • MyBatis特殊SQL的執(zhí)行實例代碼

    MyBatis特殊SQL的執(zhí)行實例代碼

    這篇文章主要給大家介紹了關于MyBatis特殊SQL執(zhí)行的相關資料,文中通過實例代碼和圖文介紹的非常詳細,對大家學習或者使用MyBatis具有一定的參考學習價值,需要的朋友可以參考下
    2023-01-01
  • Java實現(xiàn)代碼塊耗時測算工具類

    Java實現(xiàn)代碼塊耗時測算工具類

    這篇文章主要為大家介紹了如何利用Java語言編寫一個工具類,用來測算代碼塊的耗時,同時還能顯示進度,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-05-05
  • springboot+springmvc實現(xiàn)登錄攔截

    springboot+springmvc實現(xiàn)登錄攔截

    這篇文章主要介紹了springboot+springmvc實現(xiàn)登錄攔截,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Java簡單實現(xiàn)SpringMVC+MyBatis分頁插件

    Java簡單實現(xiàn)SpringMVC+MyBatis分頁插件

    自己最近搭建的一個SpringMVC+Mybatis的框架 屬于無實體類的框架 并實現(xiàn)了Myabtis的自動分頁和總數(shù)查詢 只要傳入分頁參數(shù)便能自動查詢總數(shù)和分頁 總數(shù)封裝在參數(shù)里面執(zhí)行查詢后可以直接從參數(shù)中獲取
    2015-09-09
  • Java中的Spring Security配置過濾器

    Java中的Spring Security配置過濾器

    這篇文章主要介紹了Java中的Spring Security配置過濾器,文章通過圍繞文章主題的相關資料展開詳細內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • Java二叉樹路徑和代碼示例

    Java二叉樹路徑和代碼示例

    這篇文章主要介紹了Java二叉樹路徑和代碼示例,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • 使用IDEA插件從數(shù)據(jù)庫表生成實體類方式

    使用IDEA插件從數(shù)據(jù)庫表生成實體類方式

    EasyCode是IntelliJ IDEA Ultimate版的代碼生成插件,基于velocity模板,可以生成各種與數(shù)據(jù)有關的代碼,如Entity、Dao、Service、Controller等,添加插件后,創(chuàng)建數(shù)據(jù)庫連接,配置好信息并測試連接無誤,即可通過表生成實體類
    2025-12-12
  • SpringBoot+Redission實現(xiàn)排行榜功能的示例代碼

    SpringBoot+Redission實現(xiàn)排行榜功能的示例代碼

    這篇文章主要介紹了基于SpringBoot+Redission實現(xiàn)排行榜功能,實現(xiàn)一個排行榜,要求按照分數(shù)和達成這個分數(shù)的時間排序,即相同分數(shù)下,時間早的在上面,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2024-05-05

最新評論

龙里县| 巩义市| 定兴县| 阿图什市| 青阳县| 房产| 定州市| 台北市| 武平县| 武陟县| 阳春市| 九龙坡区| 轮台县| 静宁县| 平凉市| 新龙县| 浮山县| 同仁县| 中江县| 阜阳市| 乌兰察布市| 陇南市| 明光市| 读书| 华容县| 武宁县| 满城县| 临湘市| 伊春市| 泾源县| 台州市| 久治县| 镶黄旗| 石渠县| 吴堡县| 金溪县| 玛纳斯县| 留坝县| 德清县| 瑞丽市| 资溪县|