如何在一个线程中顺序传输文件

时间:2015-03-20 13:25:52

标签: java file sockets io stream

我想用一个线程来传输多个文件, 在客户端,我只是读取一个文件,然后将它们写入输出流

 while ((read = dis.read(buf)) != -1) {
                    passedlen += read;
                    dos.write(buf, 0, read);
 }

但是当inputream(dis)读取一个文件时它不会停止,因此所有文件都只冲到一个输出流,该输出流写入我服务器端的一个文件。

那么,我该怎样做才能通过套接字输入流逐个接收我的文件?

1 个答案:

答案 0 :(得分:0)

有文件传输协议。

解决方案1。您可以重新发明自己的小协议:例如在文件内容之前存储每个文件长度。假设dos是DataOutputStream:

while ( ( file = ... ) != null ) {
  long fileSize = ...
  dos.writeLong(fileSize);

  ... write file data to dos as you did ...

}

当您在另一端阅读时,首先读取文件大小,然后读取fileSize字节。重复直到流结束。

替代解决方案

  • 使用TAR:它的设计完全是为了这个目的。有关java的信息,请参阅JTAR