This example implements methods for creating an input or output stream on a ByteBuffer.
// Obtain a ByteBuffer; see e158 Creating a ByteBuffer.
ByteBuffer buf = ByteBuffer.allocate(10);
// Create an output stream on the ByteBuffer
OutputStream os = newOutputStream(buf);
// Create an input stream on the ByteBuffer
InputStream is = newInputStream(buf);
// Returns an output stream for a ByteBuffer.
// The write() methods use the relative ByteBuffer put() methods.
public static OutputStream newOutputStream(final ByteBuffer buf) {
return new OutputStream() {
public synchronized void write(int b) throws IOException {
buf.put((byte)b);
}
public synchronized void write(byte[] bytes, int off, int len) throws IOException {
buf.put(bytes, off, len);
}
};
}
// Returns an input stream for a ByteBuffer.
// The read() methods use the relative ByteBuffer get() methods.
public static InputStream newInputStream(final ByteBuffer buf) {
return new InputStream() {
public synchronized int read() throws IOException {
if (!buf.hasRemaining()) {
return -1;
}
return buf.get();
}
public synchronized int read(byte[] bytes, int off, int len) throws IOException {
// Read only what's left
len = Math.min(len, buf.remaining());
buf.get(bytes, off, len);
return len;
}
};
}