【问题标题】:Sending file in chunks in Java在 Java 中分块发送文件
【发布时间】:2012-07-12 03:18:36
【问题描述】:

我得到了这个客户端应用程序,它将我的文件完全发送到服务器。但我希望它分块发送文件。这是我的客户端代码:

byte[] fileLength = new byte[(int) file.length()];  

        FileInputStream fis = new FileInputStream(file);  
        BufferedInputStream bis = new BufferedInputStream(fis);

        DataInputStream dis = new DataInputStream(bis);     
        dis.readFully(fileLength, 0, fileLength.length);  

        OutputStream os = socket.getOutputStream();  

        //Sending size of file.
        DataOutputStream dos = new DataOutputStream(os);   
        dos.writeLong(fileLength.length);
        dos.write(fileLength, 0, fileLength.length);     
        dos.flush();  

        socket.close();  

那么我怎样才能让客户端分块发送我的文件呢?提前致谢。

【问题讨论】:

  • 为什么要分块数据?当事先不知道要传输的数据长度时,一般使用 Chunk。
  • 我正在尝试发送大文件
  • 另外,由于您使用的是原始套接字,如果您对数据进行分块,服务器端应该知道这一点,否则,请使用标准 HTTP 协议。
  • @Santosh 我认为他只是使用了错误的标题。它不是分块发送,而是分块读取文件。
  • 我的服务器已经分块读取数据,我需要在发送之前将文件切成块,因为我不能这样发送大文件

标签: java


【解决方案1】:

尝试从客户端发送文件,例如

int count;
byte[] buffer = new byte[8192];
while ((count = in.read(buffer)) > 0)
{
  out.write(buffer, 0, count);
}

然后在服务器上重新组装。

Apache Commons 支持流式传输,因此可能会有所帮助。

【讨论】:

  • 我已经在我的服务器端得到了它,它可以工作。我需要我的客户(发送文件的那个)以块的形式发送文件,而不是完全发送
  • @RohitMalish,这里的示例代码实际上是客户端代码。
  • 好的,我现在尝试了该代码,但它发送我的文件一半为空或为空
  • 它还会让我的浏览器崩溃
  • @RohitMalish 服务器可能提前关闭了 TCP 连接,因此并非所有数据都已传输。在 socket.close 之前尝试socket.shutdownOutput() 或尝试在一个块完全传输时从服务器发回一条消息,以便客户端可以发送另一块。希望对你有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 2018-08-30
相关资源
最近更新 更多