2014-01-29 23 views
0

我是編程新手。我想製作一個程序,通過使用java的網絡傳輸大文件。願有人請我寫下如何編寫這樣一個程序,它可以通過網絡有效地傳輸任何大小的文件。一個人告訴我使用套接字通道和套接字通道作爲文件,但由於我是初學者,我不能寫'質量代碼'。提前致謝。使用nio套接字傳輸大文件

+0

試一試,寫一些代碼,那麼如果遇到一些問題,請回到我們這裏。 –

回答

-1

這個簡單的示例將幫助你。這有效,你需要適應你的情況。

public static void main(String[] args) throws Exception { 
    new Thread() { 
     public void run() { 
      ServerSocket server = null; 

      try { 
       try { 
        server = new ServerSocket(8882); 

        Socket socket = server.accept(); 

        InputStream is = socket.getInputStream(); 

        byte[] bytes = new byte[1024]; 

        while (is.read(bytes) != -1) { 
         System.out.println(new String(bytes)); 
         bytes = new byte[1024]; 
        } 
       } finally { 
        if (server != null) 
         server.close(); 
       } 
      } catch(Exception ex) { 
       ex.printStackTrace(); 
      } 
     }; 
    }.start(); 

    Socket socket = new Socket("localhost", 8882); 
    OutputStream out = socket.getOutputStream(); 

    FileInputStream fis = new FileInputStream(new File("/c:/zipfile.zip")); 

    byte[] bytes = new byte[1024]; 

    while (fis.read(bytes) != -1) { 
     out.write(bytes); 
     bytes = new byte[1024]; 
    } 

    fis.close(); 

    out.close(); 
    socket.close(); 
} 
+0

此代碼無法正常工作,並且重新創建byte []緩衝區是完全不必要的。 -1 – EJP

+0

沒有工作?使用套接字顯示數據傳輸。有什麼問題?你有什麼希望? – btafarelo

+0

它不工作,因爲你假設read()填充緩衝區,並且傳輸大小是緩衝區大小的倍數。顯然你沒有測試過它。仔細閱讀Javadpc的read()。 – EJP

0

您不需要NIO。在Java流之間複製流的標準方法如下:

while ((count = in.read(buffer)) > 0) 
{ 
    out.write(buffer, 0, count); 
} 

這適用於任何大於零的緩衝區大小。我通常使用8192字節或更多。請注意,如果不將read()結果存儲到變量中,則無法正確執行此操作,這與您可能在別處讀取的內容相反。

您將需要添加代碼來創建和接受插座,並得到他們的輸入和輸出流,並在完成時打開文件的輸入和輸出流,並關閉一切,