Получить RandomAccessFile из архива JAR - PullRequest
0 голосов
/ 12 июня 2018

Сводка:

У меня есть программа, которую я хочу отправить в виде отдельного файла jar.

Это зависит от трех больших файлов ресурсов (по 700 МБ каждый)в двоичном формате.К содержимому файла можно легко получить доступ посредством индексации, поэтому мой анализатор считывает эти файлы как RandomAccessFile -объекты.

Поэтому моя цель - получить доступ к файлам ресурсов из jar через File объекты.

Моя проблема:

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

Единственный способ, которым я до сих пор нашел доступ к файлу, упакованному в jar, - это InputStream (сгенерированный class.getResourceAsStream()), которыйсовершенно бесполезен для моего приложения, поскольку чтение этих файлов от начала до конца будет слишком медленным, вместо использования RandomAccessFile.

Копирование содержимого файла в файл, чтение и удаление его во время выполнения не вариантeigher по той же причине.

Может ли кто-нибудь подтвердить, что нет никакого способа достичь моей цели или предложить решение (или подсказку, чтобы я мог ее решить самостоятельно)?

Что я нашел до сих пор:

Я нашел этот ответ, и, если я понимаю ответ, он говорит, что решить мою проблему невозможно:

Ресурсы в файле .jar не являются файламив том смысле, что ОС может обращаться к ним напрямую через обычные API доступа к файлам.

И, поскольку java.io.File представляет именно такой файл (то есть вещь, похожую на файл в ОС), онне может использоваться для ссылки на что-либо в файле .jar.

Возможный обходной путь - извлечь ресурс во временный файл и сослаться на него с помощью файла.

Я думаю, что могу понять причины этого, но сейчас мне уже более восьми лет, и хотя я не очень образован, когда дело доходит до файловых систем и архивов, я знаю, что с тех пор язык Java довольно сильно эволюционировал, так что, возможно, естьэто надежда?:)

Вероятно, бесполезная справочная информация:

Файлы представляют собой геномы в формате 2bit, и я использую TwoBitParser из biojava через класс оболочкиTwoBitFacade ?.Javadocs можно найти здесь и здесь .

1 Ответ

0 голосов
/ 12 июня 2018

Ресурсы не являются файлами, и они живут в файле JAR, который не является носителем произвольного доступа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...