Можете ли вы получить доступ к файлам на удаленном FTP-сервере с помощью RandomAccessFile?

Я пытаюсь прочитать файл на удаленном сервере FTP с помощью библиотеки Apache Commons Net.

retrieveFileStream возвращает InputStream и помещает его в BufferedReader.

Но я хочу использовать RandomAccessFile (чтобы использовать метод seek()).

Я хочу получить Inputstream как RandomAccessFile.

Является ли это возможным?

FTPClient ftp = new FTPClient();
InputStream in = ftp.retrieveFileStream(remote_file_name);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in, "UTF-8"));

person mgjang    schedule 14.06.2019    source источник
comment
Нет. Вы не можете преобразовать InputStream в RandomAccessFile. FTP не предоставляет ничего, что могло бы помочь.   -  person user207421    schedule 14.06.2019
comment
Если я читаю файлы на удаленных FTP-серверах, могу ли я использовать RandomAccessFile?   -  person mgjang    schedule 14.06.2019
comment
Это похоже на проблему XY --- Сообщите нам, что вы пытаетесь реализовать, вместо того, чтобы спрашивать о проблеме, которую вы столкнуться с вашей необъяснимой попыткой реализовать это.   -  person Martin Prikryl    schedule 14.06.2019
comment
@ user207421 Хотя вы действительно не можете преобразовать InputStream в RandomAccessFile, неверно, что FTP не предоставляет ничего другого, что помогло бы (не говоря уже о том, что вы / мы действительно не знаем, чего хочет OP).   -  person Martin Prikryl    schedule 14.06.2019
comment
@MartinPrikryl Учитывая, что он попросил способ преобразовать входной поток FTP в RandomAccessFile, совершенно ясно, чего он хочет. Произвольный доступ через FTP, возможно чтение / запись, с использованием класса RandomAccessFile. И если вы думаете, что FTP предоставляет что-то, что могло бы помочь, почему вы именно не говорите, что это такое?   -  person user207421    schedule 14.06.2019
comment
@mgjang Какую часть «нет» вы не поняли?   -  person user207421    schedule 14.06.2019
comment
@ user207421 У FTP есть API для доступа к любой части файла. Но это неэффективно. Так что, если OP необходимо прочитать одну (несколько) определенных частей файла, тогда есть решение. Если OP действительно нуждается в RandomAccessFile-подобном API для частого доступа к небольшим частям файла по всему файлу в случайном порядке, тогда может быть более эффективным загрузить весь файл и получить к нему доступ локально. - Вот почему я считаю, что нам нужно больше информации, прежде чем отвечать на вопрос.   -  person Martin Prikryl    schedule 14.06.2019
comment
@MartinPrikryl Ну вот что я сказал. Ничего, что действительно могло бы помочь.   -  person user207421    schedule 14.06.2019
comment
@ user207421 На самом деле, нельзя использовать RandomAccessFile, пока я не скачу файлы с ftp-сервера?   -  person mgjang    schedule 14.06.2019
comment
@ user207421 @ Мартин Прикрыл Я хотел бы получить доступ к определенной части файла, не загружая файл на ftp-сервер. Раньше я использовал пропуск bufferedReader, но я знаю, что пропуск занимает много времени для больших файлов. . Итак, я хотел бы использовать RandomAccessFile. Его метод seek () очень быстрый   -  person mgjang    schedule 14.06.2019


Ответы (1)


Если вы хотите начать чтение удаленного файла с определенного смещения, используйте _ 1_. FTP-сервер должен поддерживать команду REST (большинство из них).

ftp.setRestartOffset(offset);
InputStream in = ftp.retrieveFileStream(remote_file_name);
// Now you can read as many bytes as you need from 'in'

Если вы не хотите читать файл до конца и хотите повторно использовать соединение для других операций, вам нужно вызвать _ 4_.


(Вы не можете ни конвертировать InputStream в RandomAccessFile, ни использовать RandomAccessFile с файлами на FTP-сервере)

person Martin Prikryl    schedule 14.06.2019