Второй день ищу решение.
Сейчас есть подключение к серверу, чтение из GZ-потока и подсчет полученных байтов в прошлый раз. Скачиваемые файлы будут иметь вес под 2 Gb.
Вот мой код:
InputStream inputStream = null;
InputStreamReader inputStreamReader = null;
StringBuilder stringBuilder = new StringBuilder();
String line;
try {
URI uri = new URI("ftp", "user:pass", "localhost", 21, "/file.gz", null, null);
URL url = uri.toURL();
FtpURLConnection connection = (FtpURLConnection) url.openConnection();
int countBytes = 0;
inputStream = connection.getInputStream();
inputStream = new GZIPInputStream(inputStream);
inputStreamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
int bytes;
char ch;
while ((bytes = inputStreamReader.read()) != -1) {
ch = (char) bytes;
countBytes += 1;
if (ch != '\n') {
stringBuilder.append(ch);
} else {
line = stringBuilder.toString();
System.out.println(line);
stringBuilder = new StringBuilder();
}
}
} catch (IOException | URISyntaxException e) {
e.printStackTrace();
} finally {
try {
assert inputStream != null;
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
assert inputStreamReader != null;
inputStreamReader.close();
} catch (IOException e) {
e.printStackTrace();
}
stringBuilder = null;
line = null;
}
Как передать смещение при чтении с файла по FTP?
Заголовок Range работает только для HTTP протокола.
Я в тупике(
PS: Замечания по коду и его оптимизации приветствуются.