我正在读取 Java 中的二进制文件,该文件在保存时是字节填充的,因此在读取时必须反转操作。填充在于在一个字节之后添加一个额外的零FF
字节。读取时必须丢弃该零字节。我正在使用 aDataInputStream
来读取文件,尽管这不应该有太大的区别,看看我是如何只对程序的那一部分使用“原始”读取到数组函数的。
无论如何,这是我到目前为止所得到的:
public static byte[] unstuff(byte[] stuffed) {
int bytesToSkip = 0;
for(int i=0;i<stuffed.length - 1;++i) {
if(stuffed[i] == 0xFF && stuffed[i+1] == 0) {
++bytesToSkip;
}
}
if(bytesToSkip == 0) return stuffed;
byte unstuffed[] = new byte[stuffed.length - bytesToSkip];
int j=0;
for(int i=0;i<stuffed.length - 1;++i) {
if(stuffed[i] == 0xFF && stuffed[i+1] == 0) {
++i;
continue;
}
else {
unstuffed[j] = stuffed[i];
++j;
}
}
return unstuffed;
}
基本上,该函数计算要跳过的字节数,然后分配一个比原始填充数组短该字节数的数组,并将它们复制过来,跳过不需要的零字节。
问题是:有没有其他方法可以做到这一点,也许更流畅、更高效、更直接?将字节放在另一个容器中然后删除它们而不是复制整个数组会更好吗?