【发布时间】:2014-01-29 20:03:15
【问题描述】:
我是编程新手。我想制作一个程序来使用java通过网络传输大文件。有人请告诉我如何编写这样一个程序,它可以有效地通过网络传输任何大小的文件。一个人告诉我为文件使用套接字通道和套接字通道,但由于我是初学者,我无法编写“质量代码”。提前致谢。
【问题讨论】:
-
试一试,写一些代码,如果遇到问题,请回复我们。
我是编程新手。我想制作一个程序来使用java通过网络传输大文件。有人请告诉我如何编写这样一个程序,它可以有效地通过网络传输任何大小的文件。一个人告诉我为文件使用套接字通道和套接字通道,但由于我是初学者,我无法编写“质量代码”。提前致谢。
【问题讨论】:
您不需要 NIO。 Java中流之间复制的标准方式如下:
while ((count = in.read(buffer)) > 0)
{
out.write(buffer, 0, count);
}
这适用于任何大于零的缓冲区大小。我通常使用 8192 字节或更多。请注意,如果不将 read() 结果存储到变量中,您将无法正确执行此操作,这与您在其他地方可能读到的相反。
您需要添加代码来创建和接受 Socket 并获取其输入和输出流,以及打开文件输入和输出流,并在完成后关闭所有内容,
【讨论】:
这个简单的示例将对您有所帮助。这行得通,你需要适应你的情况。
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();
}
【讨论】: