1

我需要将标题信息添加到 JPEG 文件中,以便在某些网站上共享时使其正常工作,我已经通过大量 Hex 挖掘找到了正确的信息,但现在我有点难以获得将其放入文件中。我知道它需要去文件中的哪个位置,并且我知道它有多长,我的问题是 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();

所以这不起作用,因为它覆盖,并且不插入,我找不到任何方法将数据插入文件

4

2 回答 2

3

重写文件的副本,将数据插入到所需位置。OutputStream或者,如果您想在传输(例如,HTTP 响应)时即时注入数据,也可以编写一个注入数据的代码。

于 2010-03-15T19:38:11.530 回答
0

您将需要同时使用 OutputSteam 和 InputStream。使用 InputStream 读取文件并从原始文件写入前 2 个字节。插入您的十六进制内容,然后读取输入流的其余部分并写入 OutputSteam。

用于阅读的方法:

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

写作方法:

public void write(byte b[], int off, int len) 
于 2010-03-15T19:49:42.177 回答