我正在讀Java中的二進制文件,它在保存時被字節填充,因此讀取時必須顛倒該操作。填充是在FF
字節後添加一個額外的零字節。讀取時必須丟棄該零字節。我正在使用DataInputStream
來讀取文件,雖然這應該沒有什麼區別,看到我只是使用該程序的該部分的「原始」讀取數組功能。如何解決Java中的字節填充問題?
無論如何,這裏就是我這麼遠:
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;
}
基本上,函數計算要跳過的字節數,然後分配一個數組,這比通過該號碼的原釀陣列短字節,並複製它們,跳過不需要的零字節。
問題是:有沒有其他的方式來做到這一點,也許更光滑,更高效,更直接?將字節放在另一個容器中,然後刪除它們而不是複製整個陣列效果更好?
寫入一個ByteArrayOutputStream爲你掃描陣列和掃描輸入陣列後,使用'toByteArray()'方法將ByteArayOutputStream轉換爲字節數組。 Incidenta ;; y爲什麼'for(int i = 0; i
@SteveAtkinson你問題的答案在'stuffed [i + 1]'中。 –
,假設數組總是以FF 00序列結尾,這是沒有說明的;) –