Pregunta

Tengo que añadir información de cabecera a un archivo JPEG con el fin de conseguir que funcione correctamente cuando se comparte en algunos sitios web, he rastreado la información correcta a través de una gran cantidad de Hex excavación, pero ahora estoy un poco atascado tratando de conseguir que en el archivo. Yo sé en qué parte del archivo que tiene que ir, y sé cuánto tiempo es, mi problema es que RandomAccessFile simplemente sobrescribe los datos existentes en el archivo y FileOutputStream anexa los datos al final. No quiero tampoco, quiero insertar datos a partir de la tercera bytes.

Mi código de ejemplo:

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

Así que esto no funciona, ya que sobrescribe, y no se inserta, no puedo encontrar ninguna manera basta con insertar datos en un archivo

¿Fue útil?

Solución

Usted tendrá que utilizar OutputSteam y InputStream en tándem. Leer el archivo usando InputStream y escribir los primeros 2 bytes del archivo original. El insertar su contenido hexadecimal y luego leer resto del flujo de entrada y escribir en el OutputSteam.

Método que se utiliza para la lectura:

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

Método que se utiliza para escribir:

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

Otros consejos

Vuelve a escribir una copia del archivo de la inserción de los datos en él en el lugar deseado. O escribir un OutputStream que inyecta los datos si desea hacerlo en la marcha mientras se transmite, por ejemplo, una respuesta HTTP.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top