Je construis un système en Java qui doit copier un sous-ensemble d'un fichier dans un autre fichier (pas nécessairement au début du fichier). C'est à dire. Je les paramètres suivants:Copie efficace d'un fichier à un autre
File srcFile, File dstFile, long srcFileOffset, long dstFileOffset, long length
Plusieurs threads peuvent être en train de lire à partir du même fichier source et d'écriture sur le même fichier de destination (mais avec des décalages différents) simultaneosuly donc j'ai besoin le processus d'être thread- sûr (c'est-à-dire empêcher d'autres threads de chercher dans le fichier pendant qu'un thread écrit/lit).
Comment implémenteriez-vous ceci? Dois-je utiliser un fichier RandomAccessFile ou Java NIO? Quel genre de serrures dois-je acquérir? Par exemple. Est-ce qu'une instance RandomAccessFile acquiert automatiquement un verrou système sur le fichier ou dois-je le conserver séparément? Editer: On dirait que randomAccessFile.getChannel().tryLock()
acquiert un verrou à l'échelle du système, mais il est détenu par VM, pas le thread appelant. Donc, si j'utilise cela, je dois aussi acquérir un verrou pour le thread (ou deux en fait puisque j'ai besoin de verrouiller le fichier source et le fichier de destination).
Intéressant, je suppose que la position définie par seek est locale pour l'instance RandomAccessFile. Je ne savais pas que vous pouviez ouvrir plusieurs instances avec un accès en écriture au même fichier tout en conservant des positions distinctes dans le descripteur. – Yrlec