Mega Code Archive

 
Categories / Java / Collections Data Structure
 

A growable array of bytes

/********************************************************************* * *      Copyright (C) 2005 Andrew Khan * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ***************************************************************************/ //package jxl.biff; /**   * A growable array of bytes  */ public class ByteArray {   /**    * The array grow size    */   private int growSize;   /**    * The current array    */   private byte[] bytes;   /**    * The current position    */   private int pos;   // The default grow size   private final static int defaultGrowSize = 1024;   /**    * Constructor    */   public ByteArray()   {     this(defaultGrowSize);   }   /**    * Constructor    *    * @param gs    */   public ByteArray(int gs)   {     growSize = gs;     bytes = new byte[defaultGrowSize];     pos = 0;   }   /**    * Adds a byte onto the array    *    * @param b the byte    */   public void add(byte b)   {     checkSize(1);     bytes[pos] = b;     pos++;   }      /**    * Adds an array of bytes onto the array    *    * @param b the array of bytes    */   public void add(byte[] b)   {     checkSize(b.length);     System.arraycopy(b, 0, bytes, pos, b.length);     pos += b.length;   }   /**    * Gets the complete array    *    * @return the array    */   public byte[] getBytes()   {     byte[] returnArray = new byte[pos];     System.arraycopy(bytes, 0, returnArray, 0, pos);     return returnArray;   }   /**    * Checks to see if there is sufficient space left on the array.  If not,    * then it grows the array    *    * @param sz the amount of bytes to add    */   private void checkSize(int sz)   {     while (pos + sz >= bytes.length)     {       //  Grow the array       byte[] newArray = new byte[bytes.length + growSize];       System.arraycopy(bytes, 0, newArray, 0, pos);       bytes = newArray;     }   } }