2010-03-15 5 views
1

Je dois ajouter des informations d'en-tête à un fichier JPEG afin de le faire fonctionner correctement lorsqu'il est partagé sur certains sites Web, j'ai repéré les informations correctes grâce à beaucoup d'Hex , mais maintenant je suis coincé en essayant de l'inclure dans le fichier. Je sais où dans le fichier il doit aller, et je sais combien de temps il est, mon problème est que RandomAccessFile écrase juste les données existantes dans le fichier et FileOutputStream ajoute les données à la fin. Je ne veux pas non plus, je veux insérer des données à partir du troisième octet.Ajouter des informations d'en-tête hexadécimal au fichier JPEG en utilisant Java

Mon code exemple:

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

Donc, cela ne fonctionne pas parce qu'il remplace, et n'insère pas, je ne peux pas trouver un moyen d'insérer simplement les données dans un fichier

Répondre

0

Vous devez utiliser OutputSteam et InputStream en tandem. Lisez le fichier en utilisant InputStream et écrivez les 2 premiers octets du fichier original. Insérez votre contenu hexadécimal, puis lisez le reste du flux d'entrée et écrivez dans OutputSteam.

Méthode à utiliser pour la lecture:

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

méthode à utiliser pour l'écriture:

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

réécris copie du fichier en insérant les données dans l'endroit désiré. Ou écrivez un OutputStream qui injecte les données si vous voulez le faire à la volée en transmettant, par exemple, une réponse HTTP.

Questions connexes