該類是從RAMFile中讀數據用的
最重要的一個方法:
該方法存在著從RAMFile的多個byte[1024]中讀取數據的情況,所以應該在循環中進行處理
public void readInternal(byte[] dest, int destOffset, int len) {
int remainder = len;
int start = pointer;
while (remainder != 0) {
int bufferNumber = start/BUFFER_SIZE; // buffer的序號
int bufferOffset = start%BUFFER_SIZE; // buffer偏移量
int bytesInBuffer = BUFFER_SIZE - bufferOffset;// 在當前buffer中剩下的字節數
//如果緩沖區中剩余的字節大于len,則讀出len長度的字節,如果不夠則讀出剩余的字節數
// bytesToCopy表示實際讀出的字節數
int bytesToCopy = bytesInBuffer >= remainder ? remainder : bytesInBuffer;
byte[] buffer = (byte[])file.buffers.elementAt(bufferNumber);
System.arraycopy(buffer, bufferOffset, dest, destOffset, bytesToCopy);
destOffset += bytesToCopy; //增加已經復制的byte數據長度 到 dest中的偏移量
start += bytesToCopy; //RAMFile文件指針,用來確定bufferNumber 和bytesInBuffer 相當于內存中的分頁
remainder -= bytesToCopy; //剩余的還未復制的字節數
}
pointer += len;//文件指針位置
}