private int ReadBlocks(byte[] buffer, int offset, int count) { int bytesRead = 0; if (_currentBlock == null) { NextBlock(); } for (;;) { try { if (bytesRead >= count) { break; } int remaining = count - bytesRead; int newOffset = offset + bytesRead; int justRead = _currentBlock.Read(buffer, newOffset, remaining); if (justRead < remaining) { NextBlock(); } bytesRead += justRead; } catch (XZIndexMarkerReachedException) { break; } } return(bytesRead); }