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; } }