2015-12-17 64 views
0

傳送文件通過套接字這可能是愚蠢的問題緩衝區的大小,但我想知道應該是什麼 文件傳輸應該是什麼在Java

這裏的緩衝區大小是發送文件

代碼
try { 
     ServerSocket serverSocket = new ServerSocket(1234); 
     Socket socket = serverSocket.accept(); 
     jTextArea1.append("Accepted connection : " + socket+"\n"); 
     byte [] bytearray = new byte [10485760];  //Buffer size 10Mb 
     FileInputStream fin = new FileInputStream(GetFile); 
     BufferedInputStream bin = new BufferedInputStream(fin); 
     int read; 
     OutputStream os = socket.getOutputStream(); 
     while((read=bin.read(bytearray))!=-1){ 
      jTextArea1.append("Sending Files...\n");//I have printed the read variable 
      System.out.println("Read: "+read); 
      os.write(bytearray,0,read); 
      os.flush(); 

     } 
     socket.close(); 
     serverSocket.close(); 
     System.out.println("File transfer complete\n"); 
    } catch (IOException ex) { 
     Logger.getLogger(BufferedFileTransfar.class.getName()).log(Level.SEVERE, null, ex); 
    } 
}   

注: - 輸入文件大小是143MB每從而可以緩衝大小的文件應在15份被分割,它被劃分

輸出: -

Read: 10485760 
Read: 10485760 
Read: 10485760 
Read: 10485760 
Read: 10485760 
Read: 10485760 
Read: 10485760 
Read: 10485760 
Read: 10485760 
Read: 10485760 
Read: 10485760 
Read: 10485760 
Read: 10485760 
Read: 10485760 
Read: 3603264 
File transfer complete 

所以對於同一個文件,如果我使用大緩衝區,那麼它會好嗎?

+0

通常的值在'1024'和'8192'之間。 – Kayaman

+0

所以我應該減少緩衝區大小 –

+0

嗯,你沒有得到任何東西,因爲它有那麼大。 – Kayaman

回答

-1

通常情況下它可以10241024*161024*32

並且還取決於 你將不得不測試不同的緩衝區大小應用程序,確定WHIS是最好的。你不能提前猜測。

+0

@BahramdunAdilI想要快速傳輸大文件,這麼大的緩衝區會做對或錯的詭計嗎? –

+0

@HemantSangle一個大緩衝區不會有任何區別。 – Kayaman

0

傳輸緩衝區的公用值爲幾千字節(10248192左右)範圍。小規模的原因在於,當瓶頸是實際轉移時,大緩衝沒有優勢;字節進入小批量的幾千字節頂端。有了更大的緩衝區,只有一小部分將被使用,其餘的將會浪費。

這可以很容易地通過網絡或文件傳輸進行測試,從8個字節左右的小緩衝區開始逐步增加。雖然性能明顯受到小緩衝區的傷害,但將其增加到幾千字節以內不再影響性能。

+0

你想說什麼請說明 –

+0

你可能會混淆他,因爲1千字節是1000和8千字節是8000字節而不是8192或1024. –

+1

@JohnE。不幸的是,我不認爲公斤/千字節問題是他混淆的根源。你是一個真正的聰明對接,但不是? – Kayaman