/**
* File Created at 2011-12-22
* $Id$
*
* Copyright 2008 Alibaba.com Croporation Limited.
* All rights reserved.
*
* This software is the confidential and proprietary information of
* Alibaba Company. ("Confidential Information"). You shall not
* disclose such Confidential Information and shall use it only in
* accordance with the terms of the license agreement you entered into
* with Alibaba.com.
*/
package com.alibaba.dubbo.rpc.protocol.thrift.io;
import com.alibaba.dubbo.common.io.Bytes;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
/**
* @author <a href="mailto:gang.lvg@alibaba-inc.com">kimi</a>
*/
public class RandomAccessByteArrayOutputStream extends OutputStream {
protected byte buffer[];
protected int count;
public RandomAccessByteArrayOutputStream() {
this( 32 );
}
public RandomAccessByteArrayOutputStream( int size ) {
if ( size < 0 )
throw new IllegalArgumentException( "Negative initial size: " + size );
buffer = new byte[size];
}
public void write( int b ) {
int newcount = count + 1;
if ( newcount > buffer.length )
buffer = Bytes.copyOf( buffer, Math.max( buffer.length << 1, newcount ) );
buffer[count] = ( byte ) b;
count = newcount;
}
public void write( byte b[], int off, int len ) {
if ( ( off < 0 ) || ( off > b.length ) || ( len < 0 ) || ( ( off + len ) > b.length ) || ( ( off + len ) < 0 ) )
throw new IndexOutOfBoundsException();
if ( len == 0 )
return;
int newcount = count + len;
if ( newcount > buffer.length )
buffer = Bytes.copyOf( buffer, Math.max( buffer.length << 1, newcount ) );
System.arraycopy( b, off, buffer, count, len );
count = newcount;
}
public int size() {
return count;
}
public void setWriteIndex( int index ) {
count = index;
}
public void reset() {
count = 0;
}
public byte[] toByteArray() {
return Bytes.copyOf( buffer, count );
}
public ByteBuffer toByteBuffer() {
return ByteBuffer.wrap( buffer, 0, count );
}
public void writeTo( OutputStream out ) throws IOException {
out.write( buffer, 0, count );
}
public String toString() {
return new String( buffer, 0, count );
}
public String toString( String charset ) throws UnsupportedEncodingException {
return new String( buffer, 0, count, charset );
}
public void close() throws IOException {}
}