docs: ByteBuffer getByteBuffer(final int chunkIdx) throws IOException, InterruptedException {
          if (closed.get()) {
              throw new IOException(getClass().getSimpleName() + " already closed");
          }
          if (chunkIdx < 0 || chunkIdx >= mappedByteBuffersCached.length) {
              throw new IOException("Chunk index out of range");
          }
          // Fast path: only look up singleton map if mappedByteBuffersCached is null 
          if (mappedByteBuffersCached[chunkIdx] == null) {
              // This 2GB chunk has not yet been read -- mmap it (use a singleton map so that the mmap
              // doesn't happen more than once, in case of race condition)
              try {
                  mappedByteBuffersCached[chunkIdx] = chunkIdxToByteBuffer.get(chunkIdx, /* log = */ null);
              } catch (final NullSingletonException e) {
                  throw new IOException("Cannot get ByteBuffer chunk " + chunkIdx + " : " + e);
              }
          }
          return mappedByteBuffersCached[chunkIdx];
      }