Domanda

Ho bisogno di aggiungere informazioni di intestazione di un file JPEG in modo da farlo funzionare correttamente quando condivisa su alcuni siti web, ho rintracciato le informazioni corrette attraverso un sacco di Hex scavare, ma ora sono di tipo bloccato cercando di farlo nel file. So dove nel file di cui ha bisogno per andare, e so quanto tempo è, il mio problema è che RandomAccessFile solo sovrascrive i dati esistenti nel file e FileOutputStream aggiunge i dati alla fine. Non voglio neanche, voglio inserire i dati a partire dalla terza di byte.

Il mio codice di esempio:

File fileToChange = new File("someimage.jpg");

byte[] i = new byte[2];
i[0] = (byte)Integer.decode("0xcc");
i[1] = (byte)Integer.decode("0xcc");

RandomAccessFile f = 
    new RandomAccessFile(new File("videothing.jpg"), "rw");
long aPositionWhereIWantToGo = 2;
f.seek(aPositionWhereIWantToGo); // this basically reads n bytes in the file
f.write((byte[])i);
f.close();

Quindi questo non funziona, perché sovrascrive, e non inserisce, non riesco a trovare un modo per inserire solo i dati in un file

È stato utile?

Soluzione

Sarà necessario utilizzare OutputSteam e InputStream in tandem. Leggere il file utilizzando InputStream e scrivere i primi 2 byte dal file originale. Il inserire il contenuto esadecimale e poi leggere resto del flusso di input e scrivere l'OutputSteam.

Metodo da applicare per la lettura:

public int read(byte b[], int off, int len)

Metodo da utilizzare per la scrittura:

public void write(byte b[], int off, int len) 

Altri suggerimenti

riscrivere una copia del file inserendo i dati in esso nel luogo desiderato. O scrivere un OutputStream che inietta i dati se si vuole farlo on-the-fly durante la trasmissione, ad esempio, una risposta HTTP.

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