Я пытаюсь написать программу Java для резервного копирования каталога HTTP на удаленном сервере. Удаленный сервер находится через несколько VPN/брандмауэров/что-то еще, поэтому соединение не всегда самое лучшее.
Итак, я начинаю с загрузки списка корневого каталога и рекурсивно просматриваю записи. Это простая однопоточная программа.
Итак, моя проблема в том, что иногда HTML, который я получаю, поврежден. В основном он имеет несколько нулевых байтов по всему документу, которые я могу удалить с помощью replaceAll. Но с другой стороны, в нем, кажется, есть фрагменты текста два (или больше?) раза, поэтому вместо «Это текст, пожалуйста, прочитайте меня». я получаю что-то вроде "Это teis xt, пожалуйста, прочтите меня". Если вы вырежете дубликат «is is a», все будет в порядке. Обычно таких повторяющихся текстов несколько по всему документу.
Когда я просматриваю каталог с помощью браузера (а именно Firefox), у меня нет проблем, все выглядит нормально. Просто мой загрузчик продолжает получать поврежденные данные.
Итак, вот мой фрагмент кода, который получает данные листинга HTML:
InputStream is = con.getInputStream();
if ("gzip".equals(con.getContentEncoding())) {
is = new GZIPInputStream(is);
}
int x = 0;
byte[] data = new byte[1024];
while ((x = is.read(data, 0, 1024)) >= 0) {
if (x > 0) {
retval += new String(data);
}
}
Любые идеи, что я делаю неправильно?
Привет!