У меня есть апплет, который извлекает байтовый массив с внутреннего сервера. Этот байтовый массив содержит динамическую библиотеку (DLL или SO, в зависимости от того, в какой ОС запущен апплет), которая должна быть записана на диск и впоследствии загружена с диска путем вызова System.load ().
Мне нужно убедиться, что файл не был подделан после того, как он был записан на диск и до того, как он был загружен ОС через вызов System.load (). Я получаю эксклюзивную блокировку на файл, пока он записывается на диск, но мое тестирование показывает, что я должен снять блокировку перед вызовом System.load (), иначе загрузка библиотеки не удастся.
Есть ли способ сохранить блокировку файла во время загрузки?
Пример кода:
File f = File.createTempFile("tmp", "");
RandomAccessFile raf = new RandomAccessFile(f, "rwd");
FileChannel channel = raf.getChannel();
FileLock lock = channel.lock(0, Long.MAX_VALUE, false);
// This would be where I write the DLL/SO from a byte array...
raf.write((int)65); // 'A'
raf.write((int)66); // 'B'
raf.write((int)67); // 'C'
System.out.println("Wrote dynamic library to file...");
// Close and release lock
raf.close();
System.out.println("File closed. Lock released.");
// This call fails if the file is still locked.
System.load(f.getAbsolutePath());
Любая помощь очень ценится. Решение (если оно есть) не должно быть встроено в какую-либо ОС, но должно работать на всех платформах, поддерживаемых Java. Также необходимо, чтобы решение было совместимо с Java 1.4.