Java中的客户端 - 服务器文件传输

时间:2011-11-16 14:27:10

标签: java file-io tcp

我正在寻找一种使用Java中的TCP在客户端和服务器进程之间传输文件的有效方法。我的服务器代码如下所示:

socket = serverSocket.accept();
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();

FileInputStream fis = new FileInputStream(new File(filename));

我只是不确定如何继续。我知道我想从fis读取字节然后将它们写入os,但我不确定在Java中使用字节流读取和写入字节的最佳方法。我只熟悉使用作家和读者写作/阅读文本。谁能告诉我适当的方法呢?我应该将osfis包裹在哪里(如果有的话)以及如何在没有hasNext()方法(或等效方法)的情况下继续读取字节直到文件结尾

2 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

byte[] contents = new byte[BUFFER_SIZE];
int numBytes =0;
while((numBytes = is.read(contents))>0){
   os.write(contents,0,numBytes);
}  

答案 1 :(得分:2)

您可以使用Apache的IOUtils.copy(in,out)或

import org.apache.commons.fileupload.util.Streams;
...
Streams.copy(in, out, false);

检查来源可能会很有趣。 (http://koders.com?)

java.nio.Channel有一个transferTo方法,在社区中有不同意见,对于较小/较大的文件更好。

Input / OutputStream之间的简单块副本就可以了。你可以把它包装在缓冲的流中。