92 lines
1.7 KiB
Java
92 lines
1.7 KiB
Java
package me.ag2s.umdlib.tool;
|
|
|
|
import java.io.IOException;
|
|
import java.io.OutputStream;
|
|
|
|
public class WrapOutputStream extends OutputStream {
|
|
|
|
private final OutputStream os;
|
|
private int written;
|
|
|
|
public WrapOutputStream(OutputStream os) {
|
|
this.os = os;
|
|
}
|
|
|
|
private void incCount(int value) {
|
|
int temp = written + value;
|
|
if (temp < 0) {
|
|
temp = Integer.MAX_VALUE;
|
|
}
|
|
written = temp;
|
|
}
|
|
|
|
// it is different from the writeInt of DataOutputStream
|
|
public void writeInt(int v) throws IOException {
|
|
os.write((v >>> 0) & 0xFF);
|
|
os.write((v >>> 8) & 0xFF);
|
|
os.write((v >>> 16) & 0xFF);
|
|
os.write((v >>> 24) & 0xFF);
|
|
incCount(4);
|
|
}
|
|
|
|
public void writeByte(byte b) throws IOException {
|
|
write(b);
|
|
}
|
|
|
|
public void writeByte(int n) throws IOException {
|
|
write(n);
|
|
}
|
|
|
|
public void writeBytes(byte ... bytes) throws IOException {
|
|
write(bytes);
|
|
}
|
|
|
|
public void writeBytes(int ... vals) throws IOException {
|
|
for (int v : vals) {
|
|
write(v);
|
|
}
|
|
}
|
|
|
|
public void write(byte[] b, int off, int len) throws IOException {
|
|
os.write(b, off, len);
|
|
incCount(len);
|
|
}
|
|
|
|
public void write(byte[] b) throws IOException {
|
|
os.write(b);
|
|
incCount(b.length);
|
|
}
|
|
|
|
public void write(int b) throws IOException {
|
|
os.write(b);
|
|
incCount(1);
|
|
}
|
|
|
|
/////////////////////////////////////////////////
|
|
|
|
public void close() throws IOException {
|
|
os.close();
|
|
}
|
|
|
|
public void flush() throws IOException {
|
|
os.flush();
|
|
}
|
|
|
|
public boolean equals(Object obj) {
|
|
return os.equals(obj);
|
|
}
|
|
|
|
public int hashCode() {
|
|
return os.hashCode();
|
|
}
|
|
|
|
public String toString() {
|
|
return os.toString();
|
|
}
|
|
|
|
public int getWritten() {
|
|
return written;
|
|
}
|
|
|
|
}
|