0

我正在用 JAVA 编写一个客户端-服务器程序,在该程序中我将文件从服务器发送到客户端。由于文件大小可能非常高,因此我决定将文件分成 5 个部分,然后在 5 中将其发送到同一个客户端不同的线程。

  • 我的算法是使用Java Zip API并创建一个要发送的文件的 zip 文件,然后我将 Zip 文件分成 5 个部分。问题是 [ZIP API][2] 中没有可以分割文件的方法。 这是我所指的通过 Thread 发送文件的教程。任何可以指导我的人我的算法有什么问题还是我必须使用不同的策略?
4

2 回答 2

2

您应该将拉链部分与拆分部分分开。如果您必须将这些发送给客户端,您可能不想在等待客户端请求下一个块时将完整的 zip 文件保存在内存中......所以最简单的方法是先压缩到磁盘,然后分块提供该文件。到那时,它是否是一个 zip 文件实际上并不重要——事实上,对于某些文件类型(例如图像、声音、视频),您可能根本不想通过一个 zip 文件。

我建议你告诉客户文件名和大小,然后让客户请求它想要的文件的任何部分。然后它可以决定使用什么块大小:您只需要寻找文件的正确位并提供客户端请求的尽可能多的数据。

于 2012-09-22T08:13:44.447 回答
0

分解文件不是 ZIP 功能。您可以从生成的 zip 文件创建多个字节数组(通过对数组进行分段)并在不同的线程中发送每个段。这将类似于过去的下载管理器所做的事情。

然后客户端将有代码以正确的顺序重新组装字节数组。您可能需要为每个片段添加一些附加信息,例如正确的序列、要恢复的文件名以及预期的片段数。

于 2012-09-22T08:11:52.717 回答