/** * Expert: Resets the pool to its initial state reusing the first buffer. Calling {@link * ByteBlockPool#nextBuffer()} is not needed after reset. * * @param zeroFillBuffers if <code>true</code> the buffers are filled with <tt>0</tt>. This should * be set to <code>true</code> if this pool is used with slices. * @param reuseFirst if <code>true</code> the first buffer will be reused and calling {@link * ByteBlockPool#nextBuffer()} is not needed after reset iff the block pool was used before * ie. {@link ByteBlockPool#nextBuffer()} was called before. */ public void reset(boolean zeroFillBuffers, boolean reuseFirst) { if (bufferUpto != -1) { // We allocated at least one buffer if (zeroFillBuffers) { for (int i = 0; i < bufferUpto; i++) { // Fully zero fill buffers that we fully used Arrays.fill(buffers[i], (byte) 0); } // Partial zero fill the final buffer Arrays.fill(buffers[bufferUpto], 0, byteUpto, (byte) 0); } if (bufferUpto > 0 || !reuseFirst) { final int offset = reuseFirst ? 1 : 0; // Recycle all but the first buffer allocator.recycleByteBlocks(buffers, offset, 1 + bufferUpto); Arrays.fill(buffers, offset, 1 + bufferUpto, null); } if (reuseFirst) { // Re-use the first buffer bufferUpto = 0; byteUpto = 0; byteOffset = 0; buffer = buffers[0]; } else { bufferUpto = -1; byteUpto = BYTE_BLOCK_SIZE; byteOffset = -BYTE_BLOCK_SIZE; buffer = null; } } }
public void reset() { if (bufferUpto != -1) { // We allocated at least one buffer for (int i = 0; i < bufferUpto; i++) // Fully zero fill buffers that we fully used Arrays.fill(buffers[i], (byte) 0); // Partial zero fill the final buffer Arrays.fill(buffers[bufferUpto], 0, byteUpto, (byte) 0); if (bufferUpto > 0) // Recycle all but the first buffer allocator.recycleByteBlocks(buffers, 1, 1 + bufferUpto); // Re-use the first buffer bufferUpto = 0; byteUpto = 0; byteOffset = 0; buffer = buffers[0]; } }