在 Java 中重置连接后恢复流式传输 GZIP 文件



假设我的应用程序需要通过网络流式传输巨大的 100 GB+ GZIP 压缩文件。我假设由于连接问题,这些文件可能经常无法在一次尝试中流式传输。因此,我正在寻找能够从失败点恢复流媒体的方法。我知道开箱即用的 GZIP 不允许从文件中间流式传输。但我假设它具有可以序列化的状态。然后,有了该状态,应该可以将 GZIP 读取器恢复到故障前的状态,并从故障点继续流式传输。

我将不胜感激任何关于如何实现这一目标的经验/想法。我看过GZIPInputStream,并最终在Inflater类中面对本机方法并阅读RFC。

你如何解决一个大问题? 将它们分成小块。 这是我对这个问题的初步看法,不知道关于文件类型、网络延迟、传输频率等的大量背景知识。

这是我要做的。

  1. 将该文件分解为非常小的块。为简单起见,每个 1GB。
  2. 以唯一方式和串行方式重命名这些文件。示例 {uuid}-1, {uuid}-2 等
  3. 将此元数据保存在数据存储中。 基本上,您希望跟踪您创建的所有小块。元数据可能如下所示。

[{
"file_name" : "b006194c-80ba-11e8-adc0-fa7ae01bbebc--1",
"size" : "1 GB",
"status" : "done"  
},
{
"file_name" : "dc903236-80ba-11e8-adc0-fa7ae01bbebc--2",
"size" : "1 GB",
"status" : "in_progress"  
}
]

  1. 然后你开始在网络上移动这些块。只要您有带宽,您先选择哪一个或同时选择多个都无关紧要。
  2. 如果任何块失败,您可以重试该块,而不必重做整个事情。
  3. 把它们放在一起(你也有关于如何把它们放在一起的顺序(。

祝你好运。

最新更新