2014-01-29 21 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()结果存储到变量中,则无法正确执行此操作,这与您可能在别处读取的内容相反。

您将需要添加代码来创建和接受插座,并得到他们的输入和输出流,并在完成时打开文件的输入和输出流,并关闭一切,