在Java中编辑二进制文件

本教程将介绍在Java中编辑二进制文件的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

在Java中编辑二进制文件 教程 第1张

问题描述

我需要做这个项目,从其中读取一个二进制文件,然后创建一个新的二进制文件,该文件根据偏移量添加00。例如,如果二进制数的偏移量为02,则该二进制数将移位2。因此,二进制数的偏移量为04。中间有00。

我正在考虑使用随机访问文件来访问和编辑(只读)。但我被您要查找的字节数搞糊涂了。另外,怎么编辑修改内容并将其放入全新的文件中。

致以最诚挚的问候

推荐答案

在上图中。蓝色(0x54)的第一个字节位于0x40 + 0x0E。将左侧的行值与列值相加。因此,您必须读取除该字节以外的所有内容。因此,这将被补偿0x40 + 0x0D。那将是64 + 13 = 77。由于偏移量从0开始,因此请读入前78字节,然后写出您想要的内容。然后写出文件的其余部分。这意味着所有的蓝色都将写在您的特殊插入之后。

这一切都是假定的,这就是你想要做的。但是您不能真正使用seek,因为这意味着您正在修改源文件,这是不明智的(因为您可能会犯错误,需要重新开始)。此外,搜索正在修改的文件可能会非常有问题,因为它的大小可能会不断变化。无论怎么,请确保保留该文件的备份副本。

若要进行进一步修改,请按说明继续读取和写入。

这里有一个暴力的例子。可以适当地使用Try-with-Resources和循环来改进它。例外情况被推定为受到监控。此示例仅在指定位置插入两个三元组整数,并打印新文件。

// create a file to start
FileOutputStream fo = new FileOutputStream("myfile.txt");
String alpha = "abcdefghijklmnopqrstuvwxyz";
fo.write(alpha.getBytes());
fo.close();

// create the new output file and open up the old one as an input
// file
fo = new FileOutputStream("myfile2.txt");
FileInputStream fi = new FileInputStream("myfile.txt");
// insert 123 after k
byte[] buf = new byte[100];
int count = fi.read(buf, 0, 11); // read up to and including k
fo.write(buf, 0, count);
fo.write("123".getBytes());
// insert 456 after t
count = fi.read(buf, 0, 9);
fo.write(buf, 0, count);
fo.write("456".getBytes());
//copy rest of input file to output file
while ((count = fi.read(buf, 0, 10)) > 0) {
fo.write(buf, 0, count);
}
fo.close();
fi.close();

fi = new FileInputStream("myfile2.txt");
byte[] buffer = fi.readAllBytes();
for (byte b : buffer) {
System.out.print((char) b);
}
System.out.println();
fi.close();
}

好了关于在Java中编辑二进制文件的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。