使用nio套接字传输大文件

时间:2014-01-29 11:01:06

标签: java sockets

我是编程新手。我想制作一个程序,使用java通过网络传输大文件。有人可以请我解释如何编写这样一个程序,它可以通过网络有效地传输任何大小的文件。有人告诉我使用套接字通道和套接字通道作为文件,但由于我是初学者,我不能写“质量代码”。提前谢谢。

2 个答案:

答案 0 :(得分:0)

你不需要NIO。在Java中使用流进行复制的标准方法如下:

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

这适用于任何大于零的缓冲区大小。我通常使用8192字节或更多。请注意,如果不将read()结果存储到变量中,则无法正确执行此操作,这与您在其他地方读取的内容相反。

您需要添加代码来创建和接受套接字并获取其输入和输出流,以及打开文件输入和输出流,并在完成后关闭所有内容,

答案 1 :(得分:-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();
}