Добавление шестнадцатеричной информации заголовка в файл JPEG с использованием Java - PullRequest
1 голос
/ 15 марта 2010

Мне нужно добавить информацию заголовка в файл JPEG, чтобы заставить его работать должным образом при публикации на некоторых веб-сайтах, я отслеживал правильную информацию с помощью большого количества шестнадцатеричных копаний, но теперь я застрял пытаясь получить это в файл. Я знаю, где в файле он должен находиться, и знаю, как долго это происходит, моя проблема в том, что RandomAccessFile просто перезаписывает существующие данные в файле, а FileOutputStream добавляет данные в конец. Я тоже не хочу, я хочу вставить данные, начиная с третьего байта.

Мой пример кода:

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

Так что это не работает, потому что перезаписывает и не вставляет, я не могу найти способ просто вставить данные в файл

Ответы [ 2 ]

3 голосов
/ 15 марта 2010

Перепишите копию файла, вставив в него данные в нужном месте. Или напишите OutputStream, который вводит данные, если вы хотите сделать это на лету при передаче, например, ответа HTTP.

0 голосов
/ 15 марта 2010

Вам нужно будет использовать OutputSteam и InputStream в тандеме. Прочитайте файл, используя InputStream, и запишите первые 2 байта из исходного файла. Вставьте ваш шестнадцатеричный контент, затем прочитайте остаток входного потока и запишите в OutputSteam.

Метод чтения:

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

Метод записи:

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