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