//package web.sopo.util; 
 
import java.io.InputStream; 
import java.io.OutputStream; 
 
public 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]; 
    } 
 
    /** 
     * 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; 
        } 
    } 
 
    public int getSize() { 
        return size; 
    } 
 
    /** 
     * 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; 
    } 
 
    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; 
    } 
 
    public void reset() { 
        size = 0; 
    } 
 
} 
 
    
  
  |