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

时间:2018-07-06 01:08:24

标签: java compression streaming gzip gzipinputstream

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

对于实现此目标的任何经验/想法,我将不胜感激。我已经看过GZIPInputStream并停留在Inflater类中面对本机方法并读取RFC。

1 个答案:

答案 0 :(得分:0)

您如何解决大问题?将它们分成小块。这是我最初的想法,在文件类型,网络延迟,传输频率等方面,我不了解很多背景。

这就是我要做的。

  1. 将该文件分成非常小的块。对于simplecity每个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. 您将它们放在一起(关于如何将它们放在一起也有顺序)。

祝你好运。