org.gridkit.jvmtool.stacktrace.DataBuffer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sjk-stacktrace Show documentation
Show all versions of sjk-stacktrace Show documentation
Thread dumps: capture and encoding
package org.gridkit.jvmtool.stacktrace;
import java.io.DataOutput;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;
public class DataBuffer implements DataOutput {
private byte[] buffer = new byte[512];
private int size = 0;
private java.io.DataOutputStream dos;
public DataBuffer() {
dos = new java.io.DataOutputStream(new StreamStub());
}
public void unloadTo(DataOutput out) throws IOException {
out.write(buffer, 0, size);
size = 0;
}
@Override
public void write(int b) throws IOException {
dos.write(b);
}
@Override
public void write(byte[] b) throws IOException {
dos.write(b);
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
dos.write(b, off, len);
}
@Override
public void writeBoolean(boolean v) throws IOException {
dos.writeBoolean(v);
}
@Override
public void writeByte(int v) throws IOException {
dos.writeByte(v);
}
@Override
public void writeShort(int v) throws IOException {
dos.writeShort(v);
}
@Override
public void writeChar(int v) throws IOException {
dos.writeChar(v);
}
@Override
public void writeInt(int v) throws IOException {
dos.writeInt(v);
}
@Override
public void writeLong(long v) throws IOException {
dos.writeLong(v);
}
@Override
public void writeFloat(float v) throws IOException {
dos.writeFloat(v);
}
@Override
public void writeDouble(double v) throws IOException {
dos.writeDouble(v);
}
@Override
public void writeBytes(String s) throws IOException {
dos.writeBytes(s);
}
@Override
public void writeChars(String s) throws IOException {
dos.writeChars(s);
}
@Override
public void writeUTF(String s) throws IOException {
dos.writeUTF(s);
}
private class StreamStub extends OutputStream {
@Override
public void write(int b) throws IOException {
ensureSize(size + 1);
buffer[size] = (byte) b;
size++;
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
ensureSize(size + len);
System.arraycopy(b, off, buffer, size, len);
size += len;
}
private void ensureSize(int size) {
while (buffer.length < size) {
buffer = Arrays.copyOf(buffer, 2 * buffer.length);
}
}
}
}