У меня есть файл, содержащий данные, которые имеют смысл только в кусках определенного размера, который добавляется в начале каждого фрагмента, например.Как читать большой файл с динамическим размером буфера - в зависимости от данных, считанных из файла.
{chunk_1_size}
{chunk_1}
{chunk_2_size}
{chunk_2}
{chunk_3_size}
{chunk_3}
{chunk_4_size}
{chunk_4}
{chunk_5_size}
{chunk_5}
.
.
{chunk_n_size}
{chunk_n}
Файл действительно очень большой ~ 2 Гб, а размер порции составляет ~ 20MB (что это буфер, который я хочу иметь)
Я хотел бы Buffer прочитать этот файл, чтобы уменьшить число к звонки на жесткий диск.
Но я не уверен, сколько буфера нужно иметь, потому что размер куска может отличаться.
псевдо-код, что я имею в виду:
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, а затем восстанавливать байты из следующего буфера, чтобы сформировать целое число, которое на самом деле дает мне следующий chunkSize
- Буфер не может даже быть в состоянии получить один целый кусок в то время, - я должен держать удар прочитать до первого кусок не будет полностью прочитан в память
Основываясь на том, что я протестировал ~ 20 МБ, было действительно быстро и на машине и на сервере. Я просто не доволен всеми группами, которые у меня есть между двумя последовательными чтениями файла, то есть в буфер. –