package tim.prune.save.xml; import java.nio.charset.Charset; /** * Class to collect the bytes from an input stream * and turn them into a String */ public class ByteBuffer { // Array of bytes private byte[] _bytes = new byte[1024]; // Current position to append private int _currPos = 0; // Flag for recognising utf8 encoded streams private boolean _streamUtf8 = false; // Flag for whether system is utf8 or not private final boolean _systemUtf8 = XmlUtils.isSystemUtf8(); /** * Append the given byte to the buffer * @param inB byte to append */ public void appendByte(byte inB) { // Resize array if necessary if (_currPos >= _bytes.length) { byte[] bigger = new byte[_bytes.length * 2]; System.arraycopy(_bytes, 0, bigger, 0, _bytes.length); _bytes = bigger; } // Append byte and increment counter _bytes[_currPos] = inB; _currPos++; } /** * Clear the buffer and reset */ public void clear() { _currPos = 0; // Reduce size back to default if it's got too big if (_bytes.length > 5000) { _bytes = new byte[1024]; } } /** * Set the flag that this stream is encoded with utf8 */ public void setEncodingUtf8() { _streamUtf8 = true; } /** * @return contents of buffer as a String */ public String toString() { // Sometimes the encoding of the read file isn't the default encoding of the system if (_streamUtf8 && !_systemUtf8) { return new String(_bytes, 0, _currPos, Charset.forName("UTF-8")); } // Otherwise just use system encoding return new String(_bytes, 0, _currPos); } /** * Look for the given character sequence in the last characters read * @param inChars sequence to look for * @return true if sequence found */ public boolean foundSequence(char[] inChars) { final int numChars = inChars.length; if (_currPos < numChars) {return false;} for (int i=0; i