У меня есть файл, содержащий данные, которые имеют смысл только в кусках определенного размера, который добавляется в начале каждого фрагмента, например
{chunk_1_size}
{chunk_1}
{chunkwhile(!EOF) {
/*chunk is an integer i.e. 4 bytes*/
readChunkSize();
/*according to chunk size read the number of bytes from file*/
readChunk(chunkSize);
}
size}
{chunk_2}
{chunk_3_size}
{chunk_3}
{chunk_4_size}
{chunk_4}
{chunk_5_size}
{chunk_5}
.
.
{chunk_n_size}
{chunk_n}
Файл действительно большой ~ 2 ГБ, а размер блока составляет ~ 20 МБ (это буфер, который я хочу иметь)
Я хотел бы, чтобы буфер прочитал этот файл, чтобы уменьшить количество обращений к реальному жесткому диску.
Но я не уверен, сколько буфера нужно иметь, потому что размер блока может отличаться.
псевдокод того, что я имею в виду:
while(!EOF) {
/*chunk is an integer i.e. 4 bytes*/
readChunkSize();
/*according to chunk size read the number of bytes from file*/
readChunk(chunkSize);
}
Допустим, у меня случайный размер буфера, тогда я могу заползать в такие ситуации, как:
- Первый буфер содержит chunkSize_1 + chunk_1 + partialChunk_2 --- я должен отслеживать остаток, а затем из следующего буфера получить оставшийся фрагмент и объединить его с остатком, чтобы завершить фрагмент
- Первый буфер содержит chunkSize_1 + chunk_1 + partialChunkSize_2 (размер фрагмента является целым числом, т.е. 4 байта, поэтому скажем, я получаю только два из них из первого буфера) --- я должен отслеживать partialChunkSize_2, а затем получить оставшиеся байты из следующего буфера для сформировать целое число, которое фактически дает мне следующий размер блока
- Буфер может даже не получить по одному целому фрагменту за раз - я должен продолжать нажимать чтение, пока первый фрагмент не будет полностью считан в память