Java에서 저장 될 때 바이트 채우기되는 이진 파일을 읽으므로 읽을 때 작업을 되돌려 야합니다. 스터핑은 FF
바이트 다음에 여분의 0 바이트를 추가합니다. 0 바이트는 읽을 때 무시해야합니다. 나는 DataInputStream
을 사용하여 파일을 읽었지만, 프로그램의 해당 부분에 대해 "원시"read-to-array 함수 만 사용하는 방법을 보면서 차이점을 찾아 볼 수는 없습니다. , 기본적으로 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;
}
이 함수는 바이트 수를 생략 할 수 계산 다음의 해당 번호에 의해 원래의 박제 배열보다 짧은의 배열을 할당 :
어쨌든
, 여기에 내가 지금까지있어 무엇 바이트를 복사하고이를 복사하여 원하지 않는 0 바이트를 건너 뜁니다.
질문 :이 작업을 수행하는 다른 방법이 있습니까? 더 매끄럽고 효율적이며 직관적입니까? 바이트를 다른 컨테이너에 넣은 다음 전체 배열을 복사하는 대신이를 제거하면 더 잘 작동합니까?
작성하시오있는 ByteArrayOutputStream에)' ByteArayOutputStream를 byte 배열로 변환하는 메서드. Incidenta ;; y 왜 for (int i = 0; i
@SteveAtkinson 질문에 대한 답은'채워진 [i + 1]'에 있습니다. –
배열은 항상 FF00 시퀀스로 끝나는 것으로 가정합니다.) –