Domanda

Sto cercando un modo efficiente per creare un file di dimensioni sconosciute ma che può variare da MB a GB e riempire il suo contenuto in modo casuale. Potrei scrivere i primi 200 byte che saltare fino alla fine e scrivere gli ultimi 200 byte e spostarmi al centro e scrivere lì. RandomAccessFile è efficace per farlo o ci sono alternative più adatte a questo tipo di lavoro?

È stato utile?

Soluzione

Sì, usa RandomAccessFile - ecco a cosa serve. potresti potenzialmente utilizzare un FileChannel , ma preferirei prima RandomAccessFile - è probabile che sia più semplice.

Nota che non sarai in grado di " inserire al centro " del file dopo aver scritto la parte finale: non conosco alcun file system che lo supporti. Prima di scrivere la sezione finale, dovrai conoscere la dimensione completa. Un'alternativa sarebbe scrivere in sequenza, ricordando il bit finale fino alla fine.

Se puoi darci maggiori informazioni su ciò che devi fare (e quando hai informazioni sulle dimensioni), potremmo essere in grado di aiutarti di più.

EDIT: per creare il file con una dimensione specifica, puoi seek () oltre la fine e quindi scrivere i dati:

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();
    }
}

Al termine, file.dat avrà una lunghezza di 101 byte. (Nota che normalmente useresti provare / finalmente ecc.)

EDIT: Come coobird menzionato nei commenti, setLength () estenderà anche il file, ma troncerà anche il file se si dà una lunghezza inferiore alla dimensione corrente. Dato il tuo commento sulla base della scrittura di dati torrent, sospetto che la ricerca e la scrittura siano esattamente il comportamento che desideri. Quando ricevi un pezzo, cerca nel posto giusto, scrivilo e il file si estenderà automaticamente quando sarà necessario.

Altri suggerimenti

RandomAccessFile dovrebbe farlo

Suppongo che RandomAccessFile vada bene per questo problema

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top