Возобновить потоковый GZIP-файл после сброса соединения в Java - PullRequest
0 голосов
/ 06 июля 2018

Допустим, мое приложение должно передавать по сети огромные сжатые файлы размером 100 ГБ + GZIP. Я предполагаю, что эти файлы часто не могут быть переданы в одной попытке из-за проблем с подключением. Поэтому я ищу способ восстановить потоковую передачу с того момента, когда она не удалась. Я знаю, что GZIP из коробки не позволяет потоковую передачу с середины файла. Но я предполагаю, что у него есть состояние, которое можно сериализовать. Затем, имея это состояние, должна быть возможность восстановить считыватель GZIP до состояния, в котором он находился до сбоя, и продолжить потоковую передачу из точки сбоя.

Буду признателен за любой опыт / мысли о том, как этого можно достичь. Я посмотрел на GZIPInputStream и застрял, заканчивая тем, что столкнулся с нативными методами в классе Inflater и читал RFC.

1 Ответ

0 голосов
/ 06 июля 2018

Как вы решаете большую проблему? разделите их на крошечные кусочки. вот мое первоначальное представление об этом, я не знаю много предыстории в отношении типа файла, задержки в сети, частоты передачи и т. д.

Вот что я бы сделал.

  1. Разбейте этот файл на очень маленькие кусочки. Для простоты 1ГБ каждый.
  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. Вы складываете их вместе (у вас тоже есть порядок того, как вы можете собрать их вместе).

Удачи.

...