Добавьте информацию шестнадцатеричного заголовка в файл JPEG с помощью Java

StackOverflow https://stackoverflow.com/questions/2449922

Вопрос

Мне нужно добавить информацию заголовка в файл 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();

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

Это было полезно?

Решение

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

Метод, который будет использоваться для чтения:

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

Метод, который будет использоваться для записи:

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top