content: /*
   * CDDL HEADER START
   *
   * The contents of this file are subject to the terms of the Common Development
   * and Distribution License (the "License").
   * You may not use this file except in compliance with the License.
   *
   * You can obtain a copy of the license at
   * src/com/vodafone360/people/VODAFONE.LICENSE.txt or
   * http://github.com/360/360-Engine-for-Android
   * See the License for the specific language governing permissions and
   * limitations under the License.
   *
   * When distributing Covered Code, include this CDDL HEADER in each file and
   * include the License file at src/com/vodafone360/people/VODAFONE.LICENSE.txt.
   * If applicable, add the following below this CDDL HEADER, with the fields
   * enclosed by brackets "[]" replaced with your own identifying information:
   * Portions Copyright [yyyy] [name of copyright owner]
   *
   * CDDL HEADER END
   *
   * Copyright 2010 Vodafone Sales & Services Ltd.  All rights reserved.
   * Use is subject to license terms.
   */
  
  package com.vodafone360.people.utils;
  import java.io.BufferedInputStream;
  import java.io.InputStream;
  
  /**
   * Extended BufferedInputStream with a possibility to reset it and reuse it.
   * This way one can avoid GC issues that happen to come with the BufferedInputStream 
   * which allways has to be recreated for new use.
   * @author admin
   *
   */
  public class ResetableBufferedInputStream extends BufferedInputStream {
  
      /**
       * This method takes a new InputStream and sets all counts and markers back to initial values.
       * The buffer will not be touched so it can be reused
       * @param in New InputStream to use 
       */
       public void reset(InputStream in){
          // just in case close() was called initialize the buffer again.
          if (buf==null){
            buf = new byte[8192];
          }
          this.in=in;
          count=0;
          marklimit=0;
          markpos = -1;
          pos=0;
      }
       
      /**
      * Constructs a new {@code ResetableBufferedInputStream} on the {@link InputStream}
      * {@code in}. The default buffer size (8 KB) is allocated and all reads
      * can now be filtered through this stream.
      *
      * @param in
      *            the InputStream the buffer reads from.
      */
      public ResetableBufferedInputStream(InputStream in) {
          super(in);
      }
  
      /**
       * Constructs a new {@code ResetableBufferedInputStream} on the {@link InputStream}
       * {@code in}. The buffer size is specified by the parameter {@code size}
       * and all reads are now filtered through this stream.
       *
       * @param in
       *            the input stream the buffer reads from.
       * @param size
       *            the size of buffer to allocate.
       * @throws IllegalArgumentException
       *             if {@code size < 0}.
       */
       public ResetableBufferedInputStream(InputStream in, int size) {
          super(in,size);
       }
  
  }
  