@Override public String toString() { return "Sample(index: " + index + " size: " + ssb.getSampleSizeAtIndex(index) + ")"; } }
public long getSize() { return ssb.getSampleSizeAtIndex(index); }
public synchronized ByteBuffer asByteBuffer() { ByteBuffer b; final int chunkNumber = getChunkForSample(index); SoftReference<ByteBuffer> chunkBufferSr = cache[chunkNumber]; final int chunkStartSample = chunkNumsStartSampleNum[chunkNumber] - 1; int sampleInChunk = index - chunkStartSample; long[] sampleOffsetsWithinChunk = sampleOffsetsWithinChunks[l2i(chunkNumber)]; long offsetWithInChunk = sampleOffsetsWithinChunk[sampleInChunk]; ByteBuffer chunkBuffer; if (chunkBufferSr == null || (chunkBuffer = chunkBufferSr.get()) == null) { try { chunkBuffer = topLevel.getByteBuffer( chunkOffsets[l2i(chunkNumber)], sampleOffsetsWithinChunk[sampleOffsetsWithinChunk.length - 1] + ssb.getSampleSizeAtIndex(chunkStartSample + sampleOffsetsWithinChunk.length - 1) ); cache[chunkNumber] = new SoftReference<ByteBuffer>(chunkBuffer); } catch (IOException e) { StringWriter sw = new StringWriter(); e.printStackTrace(new PrintWriter(sw)); LOG.logError(sw.toString()); throw new IndexOutOfBoundsException(e.getMessage()); } } b = (ByteBuffer) ((ByteBuffer) chunkBuffer.duplicate().position(l2i(offsetWithInChunk))).slice().limit(l2i(ssb.getSampleSizeAtIndex(index))); return b; }
sampleSum = 0; chunkSizes[currentChunkNo - 1] += ssb.getSampleSizeAtIndex(i - 1); long[] sampleOffsetsWithinChunkscurrentChunkNo = sampleOffsetsWithinChunks[currentChunkNo - 1]; int chunkNumsStartSampleNumcurrentChunkNo = chunkNumsStartSampleNum[currentChunkNo - 1]; sampleOffsetsWithinChunkscurrentChunkNo[i - chunkNumsStartSampleNumcurrentChunkNo] = sampleSum; sampleSum += ssb.getSampleSizeAtIndex(i - 1);