All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.googlecode.gwt.test.rpc.FastByteArrayOutputStream Maven / Gradle / Ivy

There is a newer version: 0.63
Show newest version
package com.googlecode.gwt.test.rpc;

import java.io.InputStream;
import java.io.OutputStream;

/**
 * ByteArrayOutputStream implementation that doesn't synchronize methods and doesn't copy the data
 * on toByteArray().
 */
class FastByteArrayOutputStream extends OutputStream {
   /**
    * Buffer and size
    */
   protected byte[] buf = null;
   protected int size = 0;

   /**
    * Constructs a stream with buffer capacity size 5K
    */
   public FastByteArrayOutputStream() {
      this(5 * 1024);
   }

   /**
    * Constructs a stream with the given initial size
    */
   public FastByteArrayOutputStream(int initSize) {
      this.size = 0;
      this.buf = new byte[initSize];
   }

   /**
    * Returns the byte array containing the written data. Note that this array will almost always be
    * larger than the amount of data actually written.
    */
   public byte[] getByteArray() {
      return buf;
   }

   /**
    * Returns a ByteArrayInputStream for reading back the written data
    */
   public InputStream getInputStream() {
      return new FastByteArrayInputStream(buf, size);
   }

   public int getSize() {
      return size;
   }

   public void reset() {
      size = 0;
   }

   public final void write(byte b[]) {
      verifyBufferSize(size + b.length);
      System.arraycopy(b, 0, buf, size, b.length);
      size += b.length;
   }

   public final void write(byte b[], int off, int len) {
      verifyBufferSize(size + len);
      System.arraycopy(b, off, buf, size, len);
      size += len;
   }

   public final void write(int b) {
      verifyBufferSize(size + 1);
      buf[size++] = (byte) b;
   }

   /**
    * Ensures that we have a large enough buffer for the given size.
    */
   private void verifyBufferSize(int sz) {
      if (sz > buf.length) {
         byte[] old = buf;
         buf = new byte[Math.max(sz, 2 * buf.length)];
         System.arraycopy(old, 0, buf, 0, old.length);
         old = null;
      }
   }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy