Pourquoi utiliser RandomAccessFile int comme compensation
-
18-09-2019 - |
Question
Je suis en train d'écrire une implémentation de test d'accès aux données et j'ai besoin un accès aléatoire au contenu du fichier. Voici le code:
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rwd");
final byte b[] = IOUtils.toByteArray(source);
randomAccessFile.write(b, (int) offset, size);
où décalage est de type long. Pourquoi ne fournit pas RandomAccessFile méthode:
public void write(byte b[], long off, int len)
Comment passer outre ce problème?
La solution
Je pense que vous êtes à la recherche de la méthode de seek
.
Le décalage en write
est un décalage dans le tableau. Les tableaux ont des décalages de int
. Il y a eu des propositions pour « longues tableaux », mais ont été mis en œuvre ces, vous auriez encore besoin d'une surcharge.
Les fichiers mappées dans NIO ont un problème en ce que le MappedByteBuffer.position
équivalent pour une raison quelconque utilise uniquement int
. Voir CR 6347833 (9 votes).