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

解決DataInputStream?read不等于-1,socket文件傳輸只能傳輸一個文件無法傳輸多個問題

 更新時間:2024年08月12日 08:58:30   作者:客?卿  
這篇文章主要介紹了解決DataInputStream?read不等于-1,socket文件傳輸只能傳輸一個文件無法傳輸多個問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

被一個朋友問到一個關于sokcet文件傳輸?shù)膯栴}

他發(fā)現(xiàn)他寫的代碼只能發(fā)送一次文件,沒辦法發(fā)送第二次,或者說發(fā)送第二次的時候服務端就接收不到了。

部分代碼

  // 開始接收文件
                    byte[] bytes = new byte[1024];
                    //byte[] bytes = new byte[dis.available()];
                    int length = 0;
                    while((length = dis.read(bytes, 0, bytes.length)) != -1) {
                    	 System.out.println(bytes.length);
                        fos.write(bytes, 0, length);
                        fos.flush();
                        
                        
                        
                    }
                    System.out.println("======== 文件接收成功 [File Name:" + fileName + "] [Size:" + getFormatFileSize(fileLength) + "] ========");

我給他調試的時候發(fā)現(xiàn)確確實實發(fā)送第一次文件后就就一直阻塞在while循環(huán)里了,出不來。

本來傳輸完第一次的文件后應該有打印“======== 文件接收成功 [File。。。。。。”

這些信息,但是實際上沒有,而且也不報錯。

調試的時候打斷點也是走著走著斷點就不見了,要說他是阻塞也不像是阻塞,因為如果是阻塞的話起碼斷點是會存在的只是無法往下運行了而已,但是他這個調試就是直接斷點就消失了,我也懵了。

后來查資料才發(fā)現(xiàn)原來只要客戶端的DataOutputStream不close掉,那么服務端的DataInputStream read就永遠不等于-1。

即使文件的數(shù)據已經傳完了,DataInputStream依舊會等著客戶端DataOutputStream再傳數(shù)據過來。

最后只能通過判斷文件的的大小來確認文件是否已經傳輸完成。

解決代碼代碼

  //dis就是DataInputStream
 String fileName = dis.readUTF();//文件名字
                    long fileLength = dis.readLong();//文件長度
                    File directory = new File(savepath);
                    if(!directory.exists()) {
                        directory.mkdir();
                    }
                    File file = new File(directory.getAbsolutePath() + File.separatorChar + fileName);
                    fos = new FileOutputStream(file);
                    // 開始接收文件
                    byte[] bytes = new byte[1024];
                    //byte[] bytes = new byte[dis.available()];
                    int length = 0;
                    while((length = dis.read(bytes, 0, bytes.length)) != -1) {
                    	 System.out.println(bytes.length);
                    	 //fos就是FileOutputStream
                        fos.write(bytes, 0, length);
                        fos.flush();

                       //*************關鍵的一步**************//
                        if(fileLength == file.length()) break;
                        //***************************//
                    }
                    System.out.println("======== 文件接收成功 [File Name:" + fileName + "] [Size:" + getFormatFileSize(fileLength) + "] ========");

總結

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

相關文章

  • 完美解決Get和Post請求中文亂碼的問題

    完美解決Get和Post請求中文亂碼的問題

    下面小編就為大家?guī)硪黄昝澜鉀QGet和Post請求中文亂碼的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • JavaWeb實戰(zhàn)之開發(fā)網上購物系統(tǒng)(超詳細)

    JavaWeb實戰(zhàn)之開發(fā)網上購物系統(tǒng)(超詳細)

    這篇文章主要介紹了JavaWeb實戰(zhàn)之開發(fā)網上購物系統(tǒng)(超詳細),文中有非常詳細的代碼示例,對正在學習java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • 基于JVM 中常見垃圾收集算法介紹

    基于JVM 中常見垃圾收集算法介紹

    下面小編就為大家分享一篇基于JVM 中常見垃圾收集算法介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • SpringBoot注解@MapperScan的實現(xiàn)

    SpringBoot注解@MapperScan的實現(xiàn)

    @MapperScan是MyBatis和MyBatis-Plus提供的SpringBoot注解,用于自動掃描并注冊?Mapper?接口,使其能夠被?Spring?容器管理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-05-05
  • java使用poi生成excel的步驟

    java使用poi生成excel的步驟

    2010以上格式使用XSSFWorkBook對象, 2003格式使用HSSFWorkBook對象, 其他對象操作基本一樣,本文重點給大家介紹java使用poi生成excel的相關知識,感興趣的朋友一起看看吧
    2022-04-04
  • Java獲取漢字拼音的全拼和首拼實現(xiàn)代碼分享

    Java獲取漢字拼音的全拼和首拼實現(xiàn)代碼分享

    這篇文章主要介紹了Java獲取漢字拼音的全拼和首拼實現(xiàn)代碼分享,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2015-06-06
  • Spring?Boot2?整合連接?Redis的操作方法

    Spring?Boot2?整合連接?Redis的操作方法

    在Spring?Boot中,通過RedisTemplate可以方便地對Redis進行操作,包括設置和獲取數(shù)據,文章詳細介紹了如何配置RedisTemplate,創(chuàng)建RedisConfig類進行自定義配置,并通過Controller訪問Redis數(shù)據庫,感興趣的朋友一起看看吧
    2025-02-02
  • SpringBoot程序CPU飆升的排查指南

    SpringBoot程序CPU飆升的排查指南

    在生產環(huán)境里,大家或多或少都遇到過這種場景:某個 Spring Boot 應用突然 CPU 飆升,打滿服務器資源,監(jiān)控報警狂響,業(yè)務接口開始超時,登錄服務器,top一看,只能看到是 java 進程在耗 CPU,所以本文給大家介紹了SpringBoot程序CPU飆升的排查指南,需要的朋友可以參考下
    2025-08-08
  • 使用@DS輕松解決動態(tài)數(shù)據源的問題

    使用@DS輕松解決動態(tài)數(shù)據源的問題

    這篇文章主要介紹了使用@DS輕松解決動態(tài)數(shù)據源的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • spring boot系列之集成測試(推薦)

    spring boot系列之集成測試(推薦)

    這篇文章主要介紹了spring boot系列集成測試,需要的朋友可以參考下
    2018-03-03

最新評論

邻水| 金华市| 瑞昌市| 库伦旗| 枞阳县| 襄樊市| 永靖县| 二连浩特市| 通州市| 四子王旗| 兰州市| 牙克石市| 会宁县| 中超| 钟祥市| 靖江市| 三河市| 忻州市| 康马县| 曲水县| 普定县| 本溪市| 临武县| 灵宝市| 吴江市| 新津县| 宝坻区| 澄江县| 陈巴尔虎旗| 兰坪| 皋兰县| 鄂托克前旗| 嘉黎县| 张家川| 辽阳县| 巨野县| 汾西县| 潜山县| 云浮市| 饶阳县| 翼城县|