package org.basex.io.out; import java.io.ByteArrayOutputStream; import java.util.Arrays; import org.basex.util.Token; /** * This class caches the output bytes in an array, similar to the * {@link ByteArrayOutputStream} class. Bytes that exceed an * optional maximum are ignored. * * @author BaseX Team 2005-12, BSD License * @author Christian Gruen */ public final class ArrayOutput extends PrintOutput { /** Byte buffer. */ private byte[] buf = new byte[8]; /** * Sets the maximum number of bytes to be written. * Note that the limit might break unicode characters. * @param m maximum * @return self reference */ public ArrayOutput max(final int m) { max = m; return this; } @Override public void write(final int b) { final int s = (int) size; if(s == max) return; if(s == buf.length) buf = Arrays.copyOf(buf, s << 1); buf[s] = (byte) b; size = s + 1; } /** * Returns the output as byte array. * @return byte array */ public byte[] toArray() { return Arrays.copyOf(buf, (int) size); } @Override public boolean finished() { return size == max; } /** * Returns the internal buffer. * @return buffer */ public byte[] buffer() { return buf; } /** * Resets the internal buffer. */ public void reset() { size = 0; } @Override public String toString() { return Token.string(buf, 0, (int) size); } }