2010-03-15 11 views
1

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

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

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

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

ответ

0

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

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

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

метод будет использоваться для записи:

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

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