Java Desktop.open (Файл f) ссылочный файл в JAR?

Двоичный поиск может использоваться для доступа заказанный данные быстро , когда пространство памяти трудно . Предположим, что Вы хотите сохранить ряд 100 000 32-разрядных целых чисел в доступной для поиска, заказанной структуре данных, но Вы не собираетесь изменять набор часто. Можно тривиально сохранить целые числа в сортированном массиве 400 000 байтов, и можно использовать двоичный поиск для доступа к нему быстро. Но если Вы помещаете их, например, в B-дерево, RB-дерево или безотносительно "более динамической" структуры данных, Вы начинаете подвергаться памяти наверху. Проиллюстрировать, храня целые числа в любом виде дерева, где Вы оставили дочерние и правильные указатели на подчиненный элемент, заставило бы Вас использовать по крайней мере 1 200 000 байтов памяти (принимающий 32-разрядную архитектуру памяти). Несомненно, существует оптимизация, которую можно сделать, но это - то, как это работает в целом.

, поскольку это очень не спешит обновлять заказанный массив (выполнение вставок или удалений), двоичный поиск не полезен, когда массив часто изменяется.

Здесь некоторые практические примеры, где я использовал двоичный поиск:

  • Реализация "переключателя ()... случай": создайте в виртуальной машине, где маркировки случая являются отдельными целыми числами. Если у Вас есть 100 случаев, можно найти корректную запись на 6 - 7 шагах с помощью двоичного поиска, где, поскольку последовательность условных переходов берет в среднем 50 сравнений.
  • Выполнение быстрого поиска подстроки с помощью суффиксных массивов, которые содержат все суффиксы набора доступных для поиска строк в lexiographic, заказывающем (я хотел сохранить память и сохранить реализацию простой)
  • Находящие числовые решения уравнения (когда Вы ленивы и не возражаете для реализации метода Newton)
7
задан Steve Kuo 12 October 2009 в 18:38
поделиться

4 ответа

«Файлы» внутри файлов .jar не являются файлами для операционной системы. Это просто часть файла .jar, которая обычно сжимается. Они не адресуются ОС как отдельные файлы и поэтому не могут отображаться таким образом.

В самой Java есть изящный способ обращения к этим файлам с помощью некоторого URI (как вы поняли, используя getResource () ), но это полностью зависит от Java.

Если вы хотите, чтобы какое-то внешнее приложение получало доступ к этому файлу, у вас есть два возможных решения:

  1. Предоставить некоторый стандартизированный способ доступа к файлу или
  2. Сделать приложение может обращаться к файлам, которые упакованы в файл .jar (или .zip).

Обычно 2 не совсем вариант (если другое приложение также не написано на Java, и в этом случае это довольно просто).

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

6
ответ дан 7 December 2019 в 01:23
поделиться

Но запись в файле JAR не является файлом ! Файл JAR - это файл; его записи являются записями JAR-файла (чтобы заявить об очевидном).

Java содержит абстракции, которые означают, что вам не обязательно работать с File s - почему бы не использовать Reader или InputStream для инкапсуляции ввода?

1
ответ дан 7 December 2019 в 01:23
поделиться

Ресурс в файле jar просто не является файлом, поэтому вы не можете использовать файл для доступа к нему. Если вы используете что-то, для чего действительно нужен файл, вам действительно придется создать временный файл и вместо этого открыть его.

3
ответ дан 7 December 2019 в 01:23
поделиться

Нет, это не так, потому что, как вы просто видите, у вас нет действительный файл на первом месте

Из статьи: Используя Desktop API в Java SE 6 мы получили

OPEN: Представляет открытое действие, выполняемое приложением, связанное с открытием определенного тип файла

Таким образом, вы должны иметь действующий файл, а затем иметь приложение, связанное с этим файлом, чтобы ОС могла его открыть. Хотя такое приложение может существовать, вы все равно должны дать ему понять URL вашего файла.

t иметь действующий файл на первом месте

Из статьи: Используя API рабочего стола в Java SE 6 мы получили

OPEN: Представляет действие открытия, выполняемое приложением, связанным с открытием конкретный тип файла

Таким образом, вы должны иметь действующий файл, а затем иметь приложение, связанное с этим файлом, чтобы ОС могла его открыть. Хотя такое приложение может существовать, вы все равно должны дать ему понять URL вашего файла.

t иметь действующий файл на первом месте

Из статьи: Используя API рабочего стола в Java SE 6 мы получили

OPEN: Представляет действие открытия, выполняемое приложением, связанным с открытием конкретный тип файла

Таким образом, вы должны иметь действующий файл, а затем иметь приложение, связанное с этим файлом, чтобы ОС могла его открыть. Хотя такое приложение может существовать, вы все равно должны дать ему понять URL вашего файла.

0
ответ дан 7 December 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: