【发布时间】:2014-03-06 19:23:43
【问题描述】:
您好团队,我正在尝试在二进制文件中查找字符串“Henry”并将该字符串更改为不同的字符串。仅供参考,该文件是对象序列化的输出。 Original Question here
我是搜索字节的新手,并想象这段代码会搜索我的 byte[] 并交换它。但它并没有接近工作它甚至找不到匹配项。
{
byte[] bytesHenry = new String("Henry").getBytes();
byte[] bytesSwap = new String("Zsswd").getBytes();
byte[] seekHenry = new byte[bytesHenry.length];
RandomAccessFile file = new RandomAccessFile(fileString,"rw");
long filePointer;
while (seekHenry != null) {
filePointer = file.getFilePointer();
file.readFully(seekHenry);
if (bytesHenry == seekHenry) {
file.seek(filePointer);
file.write(bytesSwap);
break;
}
}
}
好的,我看到了bytesHenry==seekHenry 的问题,我会换成Arrays.equals( bytesHenry , seekHenry )
我认为每次读取 5 个字节时我需要移动 -4 个字节位置。
它现在找到了宾果游戏
while (seekHenry != null) {
filePointer = file.getFilePointer();
file.readFully(seekHenry);;
if (Arrays.equals(bytesHenry,
seekHenry)) {
file.seek(filePointer);
file.write(bytesSwap);
break;
}
file.seek(filePointer);
file.read();
}
【问题讨论】:
-
如果您发现我的原始答案对打开这个问题很有用,至少要支持我的原始答案:)
-
我正在测试写入是否正常工作。 ;)
-
您是否使用最大字符串长度进行搜索?
-
如果是,您可以读取并缓存在环形缓存缓冲区中
-
对于这个例子,它是一个“亨利”,但我有兴趣听到未来更好的方法。
标签: java serialization seek randomaccessfile