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

org.monte.media.io.SeekableByteArrayOutputStream Maven / Gradle / Ivy

The newest version!


package org.monte.media.io;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;
import static java.lang.Math.*;

public class SeekableByteArrayOutputStream extends ByteArrayOutputStream {


    private int pos;


    public SeekableByteArrayOutputStream() {
	this(32);
    }


    public SeekableByteArrayOutputStream(int size) {
        if (size < 0) {
            throw new IllegalArgumentException("Negative initial size: "
                                               + size);
        }
	buf = new byte[size];
    }

    public SeekableByteArrayOutputStream(byte[] buf) {
	this.buf = buf;
    }


    @Override
    public synchronized void write(int b) {
	int newcount = max(pos + 1, count);
	if (newcount > buf.length) {
            buf = Arrays.copyOf(buf, Math.max(buf.length << 1, newcount));
	}
	buf[pos++] = (byte)b;
	count = newcount;
    }


    @Override
    public synchronized 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();
	} else if (len == 0) {
	    return;
	}
        int newcount = max(pos+len,count);
        if (newcount > buf.length) {
            buf = Arrays.copyOf(buf, Math.max(buf.length << 1, newcount));
        }
        System.arraycopy(b, off, buf, pos, len);
        pos+=len;
        count = newcount;
    }


    @Override
    public synchronized void reset() {
	count = 0;
        pos=0;
    }


    public void seek(long pos) throws IOException {
        this.pos = (int)pos;
    }


    public long getStreamPosition() throws IOException {
        return pos;
    }


    public void toOutputStream(OutputStream out) throws IOException {
        out.write(buf, 0, count);
    }


    public byte[] getBuffer() {
        return buf;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy