FileDocCategorySizeDatePackage
ByteArrayOutputStream.javaAPI DocJ2ME CLDC 1.15227Wed Feb 05 15:55:58 GMT 2003java.io

ByteArrayOutputStream

public class ByteArrayOutputStream extends OutputStream
This class implements an output stream in which the data is written into a byte array. The buffer automatically grows as data is written to it. The data can be retrieved using toByteArray() and toString().
author
Arthur van Hoff, Nik Shaylor
version
12/17/01 (CLDC 1.1)
since
JDK1.0, CLDC 1.0

Fields Summary
protected byte[]
buf
The buffer where data is stored.
protected int
count
The number of valid bytes in the buffer.
private boolean
isClosed
Flag indicating whether the stream has been closed.
Constructors Summary
public ByteArrayOutputStream()
Creates a new byte array output stream. The buffer capacity is initially 32 bytes, though its size increases if necessary.

        this(32);
    
public ByteArrayOutputStream(int size)
Creates a new byte array output stream, with a buffer capacity of the specified size, in bytes.

param
size the initial size.
exception
IllegalArgumentException if size is negative.

        if (size < 0) {
            throw new IllegalArgumentException("Negative initial size: "
                                               + size);
        }
        buf = new byte[size];
    
Methods Summary
public synchronized voidclose()
Closes this output stream and releases any system resources associated with this stream. A closed stream cannot perform output operations and cannot be reopened.

        isClosed = true;
    
private voidensureOpen()
Check to make sure that the stream has not been closed


                      
       
        if (isClosed) {
            throw new RuntimeException("Writing to closed ByteArrayOutputStream");
        }
    
public synchronized voidreset()
Resets the count field of this byte array output stream to zero, so that all currently accumulated output in the output stream is discarded. The output stream can be used again, reusing the already allocated buffer space.

see
java.io.ByteArrayInputStream#count

        ensureOpen();
        count = 0;
    
public intsize()
Returns the current size of the buffer.

return
the value of the count field, which is the number of valid bytes in this output stream.
see
java.io.ByteArrayOutputStream#count

        return count;
    
public synchronized byte[]toByteArray()
Creates a newly allocated byte array. Its size is the current size of this output stream and the valid contents of the buffer have been copied into it.

return
the current contents of this output stream, as a byte array.
see
java.io.ByteArrayOutputStream#size()

        if (isClosed && buf.length == count) {
            return buf;
        } else {
            byte newbuf[] = new byte[count];
            System.arraycopy(buf, 0, newbuf, 0, count);
            return newbuf;
        }
    
public java.lang.StringtoString()
Converts the buffer's contents into a string, translating bytes into characters according to the platform's default character encoding.

return
String translated from the buffer's contents.
since
JDK1.1

      return new String(buf, 0, count);
    
public synchronized voidwrite(int b)
Writes the specified byte to this byte array output stream.

param
b the byte to be written.

        ensureOpen();
        int newcount = count + 1;
        if (newcount > buf.length) {
            byte newbuf[] = new byte[Math.max(buf.length << 1, newcount)];
            System.arraycopy(buf, 0, newbuf, 0, count);
            buf = newbuf;
        }
        buf[count] = (byte)b;
        count = newcount;
    
public synchronized voidwrite(byte[] b, int off, int len)
Writes len bytes from the specified byte array starting at offset off to this byte array output stream.

param
b the data.
param
off the start offset in the data.
param
len the number of bytes to write.

        ensureOpen();
        if ((off < 0) || (off > b.length) || (len < 0) ||
            ((off + len) > b.length) || ((off + len) < 0)) {
            throw new IndexOutOfBoundsException();
        } else if (len == 0) {
            return;
        }
        int newcount = count + len;
        if (newcount > buf.length) {
            byte newbuf[] = new byte[Math.max(buf.length << 1, newcount)];
            System.arraycopy(buf, 0, newbuf, 0, count);
            buf = newbuf;
        }
        System.arraycopy(b, off, buf, count, len);
        count = newcount;