Question

Je dois ajouter des informations d'en-tête dans un fichier JPEG afin de le faire fonctionner correctement quand elle est partagée sur certains sites, j'ai retracé les informations correctes par beaucoup de Hex creuser, mais maintenant je suis un peu coincé essayer de l'obtenir dans le fichier. Je sais où dans le fichier dont il a besoin d'aller, et je sais combien de temps il est, mon problème est que RandomAccessFile simplement les données existantes dans écrase le fichier et FileOutputStream les données à joint la fin. Je ne veux pas non plus, je veux insérer des données à partir du troisième octet.

Mon exemple de code:

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

Était-ce utile?

La solution

Vous devrez utiliser OutputSteam et InputStream en tandem. Lire le fichier en utilisant InputStream et écrire 2 premiers octets du fichier d'origine. L'insérer votre contenu hexadécimal et puis lire reste du flux d'entrée et écrire au 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) 

Autres conseils

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

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