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