Действительно ли Java может Зарегистрировать метод “canWrite ()” блокировка поддержки?

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

С этой целью существует несколько вариантов, которые я использовал в некоторой степени сверхурочно:

  • Компрессор YUI . JavaScript! JavaScript-компрессор делает хорошую работу по уплотнению кода, который улучшит время загрузки. Существует небольшой уровень обфускации, который работает относительно хорошо. По сути, Compressor будет изменять имена функций, удалять пустое пространство и изменять локальные переменные. Это то, что я использую чаще всего. Это инструмент Java с открытым исходным кодом.
  • JSMin - это инструмент, написанный Дугласом Крокфордом, который пытается минимизировать ваш источник JavaScript. По словам Крокфорда, «JSMin не запутывает, но он угадает». Основной задачей является минимизация размера вашего источника для более быстрой загрузки в браузерах.
  • Бесплатный JavaScript Obfuscator . Это веб-инструмент, который пытается обфускать ваш код, фактически кодируя его. Я думаю, что компромиссы его формы кодирования (или обфускации) могут зависеть от размера файлов; однако это вопрос личных предпочтений.

12
задан erickson 24 September 2008 в 15:36
поделиться

5 ответов

Нет, canWrite не подходит с этой целью. В целом файл будет перезаписываем, даже если другой процесс запишет.

Вам нужен протокол более высокого уровня для координирования блокировки. Если Вы планируете использовать этот код на единой платформе, Вы можете использовать средство FileLock NIO. Но прочитайте документацию тщательно и обратите внимание, что на многих платформах, блокировка является только консультацией.

Другой подход должен иметь одну запись процесса файл с именем, которое Ваш процесс не распознает, затем переименовать файл к распознаваемому имени, когда запись будет завершена. На большинстве платформ переименовать операция является атомарной, если источник и место назначения являются тем же томом файловой системы. Смена имени могла бы использовать другое расширение файла или даже перемещение файла от одного каталога до другого (на том же объеме).

Так как в этом случае Вы работаете исключительно с XML, искание близкого тега работало бы, но это не является надежным — что, если существуют комментарии после заключительной разметки или устройства записи, или просто не пишет допустимый XML?

Поиск EOF не будет работать. Всегда будет EOF, даже когда писатель только что открыл файл и ничего еще не записал. Если бы это не было так, то самая легкая вещь состояла бы в том, чтобы позволить читателю начинать анализировать, как только файл обнаружился; это просто заблокировалось бы, пока устройство записи не закрыло файл. Но файловая система не прокладывает себе путь. Каждый файл имеет конец, даже если некоторый процесс в настоящее время перемещает его.

14
ответ дан 2 December 2019 в 07:23
поделиться

Кроме того, если Вы делаете проверку, сопровождаемую записью, затем у Вас есть состояние состязания. Состояние могло измениться между проверкой и записью. Иногда ее лучшее, чтобы попытаться сделать вещь Вы хотите и обрабатываете ошибки корректно. возможно, механизм повторной попытки n-попытки с увеличенной нейтрализацией задерживает время.

Или переопределите свой тест. В этом случае Вы могли, возможно, протестировать это, размер файла не изменился в течение времени прежде, чем обработать его.

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

4
ответ дан 2 December 2019 в 07:23
поделиться

Насколько я знаю, нет никакого способа сказать, имеет ли другой процесс в настоящее время открытый дескриптор в файл от Java. Одна опция состоит в том, чтобы использовать класс FileLock от нового io. Это не поддерживается на всех платформах, но если файлы локальны и процесс, пишущий, что файл сотрудничает, это должно работать на любые блокировки поддержки платформы.

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

Если Вы управляете и средством чтения и устройством записи, то потенциальный метод блокировки состоял бы в том, чтобы создать каталог блокировки - который обычно является атомарной операцией - для чтения и продолжительности процесса записи. При взятии этого типа подхода необходимо управлять потенциальным отказом процесса, приводящего к "зависающему" каталогу блокировки.

Как упомянутый Cheekysoft, файлы не являются атомарными и плохо подходят для блокировки.

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

0
ответ дан 2 December 2019 в 07:23
поделиться

Одна вещь, которая, похоже, работает в Windows: - Создайте объект File (), представляющий рассматриваемый файл (используя конструктор с полным именем файла) - Таким же образом создайте второй идентичный файловый объект. - Попробуйте firstFile.renameTo (secondFile)

Это фиктивное переименование, похоже, успешно работает с файлами, которые не открыты для редактирования другим приложением (я тестировал с Word), но не работает, если они открыты.

И поскольку новое имя файла = старое имя файла, оно не создает никакой другой работы.

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

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