Java flux ouvert à partir d'un emplacement arbitraire dans le fichier
-
26-10-2019 - |
Question
Je veux obtenir un flux de quelque position arbitraire dans un fichier existant, par exemple, je dois lecture / écriture de / vers un fichier commençant par octet 101e. Est-il sûr d'utiliser quelque chose comme ça?
final FileInputStream fin = new FileInputStream(f);
fin.skip(100);
Passer javadoc indique que il peut parfois sauter plus petit nombre d'octets que spécifié. Que dois-je faire?
La solution
Qu'en est-ce qui suit:
final RandomAccessFile raf = new RandomAccessFile(f, mode);
raf.seek(100);
final FileInputStream fin = new FileInputStream(raf.getFD());
// read from fin
Autres conseils
vous ne pouvez pas écrire en utilisant un FileInputStream. vous devez utiliser un RandomAccessFile si vous voulez écrire à divers endroits dans un fichier. eunfortunately, il n'y a pas moyen facile d'utiliser un RandomAccessFile comme InputStream / OutputStream (qui ressemble à @aix peut avoir une bonne idée d'adapter RandomAccessFile à InputStream / OutputStream), mais il existe différents adaptateurs exemple disponibles en ligne .
Une autre alternative est d'utiliser un FileChannel. vous pouvez définir la position du FileChannel directement, puis utilisez les méthodes utilitaires canaux pour obtenir InputStream / OutputStream adaptateurs au-dessus de la Manche.