diff options
author | Andreas Fankhauser hiddenalpha.ch | 2022-12-30 01:05:20 +0100 |
---|---|---|
committer | Andreas Fankhauser hiddenalpha.ch | 2022-12-30 01:05:20 +0100 |
commit | b426acc268453ddd342921c53f2e48faac8a0b8f (patch) | |
tree | 67dc63a49c231de8efe339d1ee37e5928a0c0244 | |
parent | 8321e3d6f61bbca4570cfafc4ce5bc195a8c60fa (diff) | |
download | xtra4j-b426acc268453ddd342921c53f2e48faac8a0b8f.zip xtra4j-b426acc268453ddd342921c53f2e48faac8a0b8f.tar.gz |
Add ByteCountOutputStream and ByteCountInputStreamwip-setup
-rw-r--r-- | xtra4j-misc/src/main/java/ch/hiddenalpha/xtra4j/octetstream/ByteCountInputStream.java | 67 | ||||
-rw-r--r-- | xtra4j-misc/src/main/java/ch/hiddenalpha/xtra4j/octetstream/ByteCountOutputStream.java | 40 |
2 files changed, 107 insertions, 0 deletions
diff --git a/xtra4j-misc/src/main/java/ch/hiddenalpha/xtra4j/octetstream/ByteCountInputStream.java b/xtra4j-misc/src/main/java/ch/hiddenalpha/xtra4j/octetstream/ByteCountInputStream.java new file mode 100644 index 0000000..25da757 --- /dev/null +++ b/xtra4j-misc/src/main/java/ch/hiddenalpha/xtra4j/octetstream/ByteCountInputStream.java @@ -0,0 +1,67 @@ +package ch.hiddenalpha.xtra4j.octetstream; + +import java.io.IOException; +import java.io.InputStream; + + +/** + * {@link InputStream} decorator to count bytes flowed through the stream. + * + */ +public class ByteCountInputStream extends InputStream { + + // TODO: mark/reset should be simple to implement. + + private final InputStream origin; + private long numBytes = 0; + + public ByteCountInputStream( InputStream origin ){ + this.origin = origin; + } + + /** @return How many bytes had flown through this stream. */ + public long getByteCount() { return numBytes; } + + @Override + public int read() throws IOException { + int b = origin.read(); + if( b >= 0 ){ + numBytes += 1; } + return b; + } + + @Override + public int read( byte[] b, int off, int len ) throws IOException { + int readLen = origin.read(b, off, len); + if( readLen > 0 ){ + numBytes += readLen; } + return readLen; + } + + @Override + public int available() throws IOException { + return origin.available(); + } + + @Override + public void close() throws IOException { + origin.close(); + } + + //@Override + //public synchronized void mark( int readlimit ) { + // origin.mark(readlimit); + //} + + //@Override + //public synchronized void reset() throws IOException { + // origin.reset(); + //} + + @Override + public boolean markSupported() { + return false; + //return origin.markSupported(); + } + +} diff --git a/xtra4j-misc/src/main/java/ch/hiddenalpha/xtra4j/octetstream/ByteCountOutputStream.java b/xtra4j-misc/src/main/java/ch/hiddenalpha/xtra4j/octetstream/ByteCountOutputStream.java new file mode 100644 index 0000000..1cb9d0d --- /dev/null +++ b/xtra4j-misc/src/main/java/ch/hiddenalpha/xtra4j/octetstream/ByteCountOutputStream.java @@ -0,0 +1,40 @@ +package ch.hiddenalpha.xtra4j.octetstream; + +import java.io.IOException; +import java.io.OutputStream; + + +/** + * {@link OutputStream} decorator to count bytes flowed through the stream. + */ +public class ByteCountOutputStream extends OutputStream { + + private final OutputStream origin; + private long numBytes = 0; + + public ByteCountOutputStream( OutputStream origin ){ + this.origin = origin; + } + + /** @return How many bytes did pass that stream up to now. */ + public long getByteCount() { return numBytes; } + + @Override + public void write( int b ) throws IOException { + numBytes += 1; + origin.write(b); + } + + @Override + public void write( byte[] b, int off, int len ) throws IOException { + numBytes += len; + origin.write(b, off, len); + } + + @Override + public void flush() throws IOException { origin.flush(); } + + @Override + public void close() throws IOException { origin.close(); } + +} |