off 값도 이상하고, read 값도 다른 듯 합니다.
off 값이 변경 되지 않으니, 계속 off 위치부터 버퍼 읽어질테구.
어떻게든 buffer 는 4096 채워질텐데.. read는 처음 4095 읽고, 두번째 1 만큼 읽은다면,
Log.d(TAG, "readSize: " + read); 이 1이 찍히고, 밑의 수식이 다 원하는 동작을 하지 않을 듯 합니다.
특히 existVideo.write(combineByteArray(buffer, getDivSwapCnt()), 0, read); 는 어떤 동작을 하는지, 코드만 봐서는 알 수 없는데.. 아마 더 큰 사이즈로 저장 된다면, 이 부분이 오동작 할 것으로 생각됩니다.
우선 문제로 보이는 대로만 수정한 코드입니다.
int read = 0;
int off = 0;
int length = 4096;
int totalRead = 0;
byte[] buffer = new byte[4096];
boolean done = false;
while(!done) {
while (length > 0) {
read = isVideo.read(buffer, off, length);
if (read <= 0) {
done = true;
break;
}
length -= read;
totalRead += read;
off += read;
}
Log.d(TAG, "readSize: " + totalRead);
existVideo.write(combineByteArray(buffer, getDivSwapCnt()), 0, totalRead);
value += totalRead;
progressDialog.setProgress((int) (value / fileSize * 100));
}