private void needNewBuffer(int newcount){
  if (currentBufferIndex < buffers.size() - 1) {
    filledBufferSum+=currentBuffer.length;
    currentBufferIndex++;
    currentBuffer=buffers.get(currentBufferIndex);
  }
 else {
    int newBufferSize;
    if (currentBuffer == null) {
      newBufferSize=newcount;
      filledBufferSum=0;
    }
 else {
      newBufferSize=Math.max(currentBuffer.length << 1,newcount - filledBufferSum);
      filledBufferSum+=currentBuffer.length;
    }
    currentBufferIndex++;
    currentBuffer=new byte[newBufferSize];
    buffers.add(currentBuffer);
  }
}

private void needNewBuffer ( int newcount ) { if ( currentBufferIndex < buffers . size ( ) - 1 ) { filledBufferSum += currentBuffer . length ; currentBufferIndex ++ ; currentBuffer = buffers . get ( currentBufferIndex ) ; } else { int newBufferSize ; if ( currentBuffer == null ) { newBufferSize = newcount ; filledBufferSum = 0 ; } else { newBufferSize = Math . max ( currentBuffer . length << 1 , newcount - filledBufferSum ) ; filledBufferSum += currentBuffer . length ; } currentBufferIndex ++ ; currentBuffer = new byte [ newBufferSize ] ; buffers . add ( currentBuffer ) ; } }
makes a new buffer available either by allocating a new one or re - cycling an existing one .
