Двоичный поиск может использоваться для доступа заказанный данные быстро , когда пространство памяти трудно . Предположим, что Вы хотите сохранить ряд 100 000 32-разрядных целых чисел в доступной для поиска, заказанной структуре данных, но Вы не собираетесь изменять набор часто. Можно тривиально сохранить целые числа в сортированном массиве 400 000 байтов, и можно использовать двоичный поиск для доступа к нему быстро. Но если Вы помещаете их, например, в B-дерево, RB-дерево или безотносительно "более динамической" структуры данных, Вы начинаете подвергаться памяти наверху. Проиллюстрировать, храня целые числа в любом виде дерева, где Вы оставили дочерние и правильные указатели на подчиненный элемент, заставило бы Вас использовать по крайней мере 1 200 000 байтов памяти (принимающий 32-разрядную архитектуру памяти). Несомненно, существует оптимизация, которую можно сделать, но это - то, как это работает в целом.
, поскольку это очень не спешит обновлять заказанный массив (выполнение вставок или удалений), двоичный поиск не полезен, когда массив часто изменяется.
Здесь некоторые практические примеры, где я использовал двоичный поиск:
«Файлы» внутри файлов .jar не являются файлами для операционной системы. Это просто часть файла .jar, которая обычно сжимается. Они не адресуются ОС как отдельные файлы и поэтому не могут отображаться таким образом.
В самой Java есть изящный способ обращения к этим файлам с помощью некоторого URI (как вы поняли, используя getResource ()
), но это полностью зависит от Java.
Если вы хотите, чтобы какое-то внешнее приложение получало доступ к этому файлу, у вас есть два возможных решения:
Обычно 2 не совсем вариант (если другое приложение также не написано на Java, и в этом случае это довольно просто).
Вариант 1 обычно выполняется простой записью во временный файл и обращением к нему. В качестве альтернативы вы можете запустить небольшой веб-сервер и предоставить файл по некоторому URL-адресу.
Но запись в файле JAR не является файлом
! Файл JAR - это файл; его записи являются записями JAR-файла (чтобы заявить об очевидном).
Java содержит абстракции, которые означают, что вам не обязательно работать с File
s - почему бы не использовать Reader
или InputStream
для инкапсуляции ввода?
Ресурс в файле jar просто не является файлом, поэтому вы не можете использовать файл
для доступа к нему. Если вы используете что-то, для чего действительно нужен файл, вам действительно придется создать временный файл и вместо этого открыть его.
Нет, это не так, потому что, как вы просто видите, у вас нет действительный файл на первом месте
Из статьи: Используя Desktop API в Java SE 6 мы получили
OPEN: Представляет открытое действие, выполняемое приложением, связанное с открытием определенного тип файла
Таким образом, вы должны иметь действующий файл, а затем иметь приложение, связанное с этим файлом, чтобы ОС могла его открыть. Хотя такое приложение может существовать, вы все равно должны дать ему понять URL вашего файла.
t иметь действующий файл на первом местеИз статьи: Используя API рабочего стола в Java SE 6 мы получили
OPEN: Представляет действие открытия, выполняемое приложением, связанным с открытием конкретный тип файла
Таким образом, вы должны иметь действующий файл, а затем иметь приложение, связанное с этим файлом, чтобы ОС могла его открыть. Хотя такое приложение может существовать, вы все равно должны дать ему понять URL вашего файла.
t иметь действующий файл на первом местеИз статьи: Используя API рабочего стола в Java SE 6 мы получили
OPEN: Представляет действие открытия, выполняемое приложением, связанным с открытием конкретный тип файла
Таким образом, вы должны иметь действующий файл, а затем иметь приложение, связанное с этим файлом, чтобы ОС могла его открыть. Хотя такое приложение может существовать, вы все равно должны дать ему понять URL вашего файла.