Question

Je recherche un moyen efficace de créer un fichier dont la taille est inconnue mais qui peut aller de mb à gb et remplir son contenu de manière aléatoire. Je peux écrire les 200 premiers octets puis sauter à la fin, écrire les 200 derniers octets, me déplacer au milieu et y écrire. RandomAccessFile est-il efficace pour ce faire ou existe-t-il des alternatives mieux adaptées à ce type de travail?

Était-ce utile?

La solution

Oui, utilisez RandomAccessFile - c’est pour cela qu’il est. Vous pourriez utiliser potentiellement un FileChannel , mais je choisirais d'abord RandomAccessFile - cela sera probablement plus simple.

Notez que vous ne pourrez pas "insérer au milieu". du fichier après avoir écrit la partie finale: je ne connais aucun système de fichiers qui le supporte. Vous aurez besoin de connaître la taille complète avant de rédiger la dernière section, en gros. Une alternative serait d’écrire séquentiellement, en mémorisant le dernier bit jusqu’à la fin.

Si vous pouvez nous donner plus d'informations sur ce que vous devez faire (et sur les informations relatives à la taille), nous pourrons peut-être vous aider davantage.

EDIT: pour créer le fichier avec une taille spécifique, vous pouvez seek () après la fin, puis écrire des données:

import java.io.*;

public class Test
{
    // Just for the sake of a simple test program!
    public static void main(String[] args) throws Exception
    {
        RandomAccessFile file = new RandomAccessFile("file.dat", "rw");

        file.seek(100);
        file.write(0);
        file.close();
    }
}

Après que cela se soit terminé, fichier.dat aura une longueur de 101 octets. (Notez que normalement, vous utiliseriez try / finally etc.)

EDIT: Comme coobird mentionné dans les commentaires, setLength () étendra également le fichier - mais il tronquera également le fichier si vous lui donnez une longueur inférieure à la taille actuelle. Compte tenu de votre commentaire sur l’écriture de données torrent, j’imagine que rechercher et écrire est exactement le comportement que vous souhaitez. Lorsque vous recevez un morceau, cherchez au bon endroit, écrivez-le et le fichier s’étendra au besoin.

Autres conseils

RandomAccessFile devrait le faire

Je suppose que RandomAccessFile convient à ce problème

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top