package com.jpexs.proxy;
import java.io.IOException;
import java.io.OutputStream;
public class ByteArray {
public byte[] bytes;
public int offset = 0;
/**
* Create a ByteArray with the default size.
*/
public ByteArray() {
this(512);
}
/**
* Create a ByteArray with a specific default size.
*/
public ByteArray(int size) {
bytes = new byte[size];
}
/**
* Create a ByteArray from a String.
*/
public ByteArray(String s) {
this(s.length());
append(s);
}
/**
* Create a ByteArray from an array of bytes.
*/
public ByteArray(byte[] b) {
this(b.length);
append(b);
}
/**
* Append a byte.
*/
public void append(byte ch) {
if (offset == bytes.length) {
byte[] tmpbytes = bytes;
bytes = new byte[tmpbytes.length * 2];
System.arraycopy(tmpbytes, 0, bytes, 0, offset);
}
bytes[offset++] = ch;
}
/**
* Append a ByteArray.
*/
public void append(ByteArray b) {
if (bytes.length - offset < b.length()) {
byte[] tmpbytes = bytes;
bytes = new byte[tmpbytes.length + b.length()];
System.arraycopy(tmpbytes, 0, bytes, 0, offset);
}
System.arraycopy(b.bytes, 0, bytes, offset, b.length());
offset += b.length();
}
/**
* Append an array of bytes.
*/
public void append(byte[] b) {
if (bytes.length - offset < b.length) {
byte[] tmpbytes = bytes;
bytes = new byte[tmpbytes.length + b.length];
System.arraycopy(tmpbytes, 0, bytes, 0, offset);
}
System.arraycopy(b, 0, bytes, offset, b.length);
offset += b.length;
}
/**
* Append a String.
*/
public void append(String s) {
append(s.getBytes());
}
/**
* Convert to String.
*/
public String toString() {
return new String(bytes, 0, offset);
}
/**
* Return the bytes.
*/
public byte[] getBytes() {
return bytes;
}
public void writeTo(OutputStream out)
throws IOException {
out.write(bytes, 0, offset);
}
public byte get(int i) {
return bytes[i];
}
/**
* Return the number of bytes.
*/
public int length() {
return offset;
}
public void erase() {
offset = 0;
}
public void chop() {
chop(1);
}
public void chop(int i) {
offset -= i;
if (offset < 0) {
offset = 0;
}
}
}