2012-01-22 38 views
0

下面的代碼有時按預期工作,其他時間創建空文件而不寫入它們或寫入緩衝區的一部分創建較小的文件。我在這裏做錯了什麼?在這裏我有時會提到,因爲連續的呼叫都是這樣做的。代碼是從服務器下載文件。 readSize每次顯示它已從流中讀取預期的數量。但並不總是將它們寫入文件。FileoutputStream偶爾創建空文件

byte[] bytes = new byte[socket.getSendBufferSize()]; 

    long readSize = 0; 
    int length = 0; 
    System.out.println(fileSize); 
    while (readSize < fileSize 
      && (length = socket.getInputStream().read(bytes)) != -1) { 

     fileOutputStream.write(bytes, 0, length); 
     readSize += length; 
     fileOutputStream.flush(); 
    } 

    fileOutputStream.flush(); 
    fileOutputStream.close(); 
    socket.close(); 
+0

數據來自哪裏?即什麼是套接字連接?你是否已經通過調試器中的代碼檢查了什麼是錯誤的? –

回答

0

文件爲空while條件爲false。

System.out.println("Inside WHILE")加入while裏面並檢查文件是否爲空..當文件爲空時,您將不會看到Inside WHILE,反之亦然。