Я строю систему на Java, которая должна скопировать подмножество файла в другой файл (не обязательно в начало файла). То есть У меня есть следующие параметры:Эффективная копия из одного файла в другой
File srcFile, File dstFile, long srcFileOffset, long dstFileOffset, long length
Несколько потоков могут быть чтение из того же исходного файла и производя запись в том же направлении-файл (хотя и с разными сдвигами) simultaneosuly так что мне нужен, чтобы этот процесс резьбовыми безопасный (т. е. предотвращение поиска других потоков в файле при записи/чтении потока).
Как вы это реализуете? Должен ли я использовать RandomAccessFile или Java NIO? Какие блокировки мне нужно приобрести? Например. экземпляр RandomAccessFile автоматически получает общесистемную блокировку в файле или мне нужно сохранить это отдельно?
Редактировать: Похоже, что randomAccessFile.getChannel().tryLock()
приобретает системный замок, но удерживается VM, а не вызывающей нитью. Поэтому, если я использую это, мне также необходимо получить блокировку для потока (или два на самом деле, так как мне нужно заблокировать как исходный, так и целевой файл).
Интересно, я полагаю, что позиция, заданная поиском, является локальной для экземпляра RandomAccessFile. Я не знал, что вы можете открыть несколько экземпляров с возможностью записи в один файл и сохранить отдельные позиции в дескрипторе. – Yrlec