diff --git a/src/main/java/org/warp/commonutils/stream/ByteBufferBackedInputStream.java b/src/main/java/org/warp/commonutils/stream/ByteBufferBackedInputStream.java new file mode 100644 index 0000000..92952f5 --- /dev/null +++ b/src/main/java/org/warp/commonutils/stream/ByteBufferBackedInputStream.java @@ -0,0 +1,28 @@ +package org.warp.commonutils.stream; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.ByteBuffer; + +/** + * Simple {@link InputStream} implementation that exposes currently + * available content of a {@link ByteBuffer}. + */ +public class ByteBufferBackedInputStream extends InputStream { + protected final ByteBuffer _b; + + public ByteBufferBackedInputStream(ByteBuffer buf) { _b = buf; } + + @Override public int available() { return _b.remaining(); } + + @Override + public int read() throws IOException { return _b.hasRemaining() ? (_b.get() & 0xFF) : -1; } + + @Override + public int read(byte[] bytes, int off, int len) throws IOException { + if (!_b.hasRemaining()) return -1; + len = Math.min(len, _b.remaining()); + _b.get(bytes, off, len); + return len; + } +} \ No newline at end of file