diff options
Diffstat (limited to 'platform/java/src')
-rw-r--r-- | platform/java/src/com/artifex/mupdf/fitz/BufferInputStream.java | 55 | ||||
-rw-r--r-- | platform/java/src/com/artifex/mupdf/fitz/BufferOutputStream.java | 66 |
2 files changed, 121 insertions, 0 deletions
diff --git a/platform/java/src/com/artifex/mupdf/fitz/BufferInputStream.java b/platform/java/src/com/artifex/mupdf/fitz/BufferInputStream.java new file mode 100644 index 00000000..6a03dc00 --- /dev/null +++ b/platform/java/src/com/artifex/mupdf/fitz/BufferInputStream.java @@ -0,0 +1,55 @@ +package com.artifex.mupdf.fitz; + +import java.io.IOException; +import java.io.InputStream; + +public class BufferInputStream extends InputStream +{ + protected Buffer buffer; + protected int position; + protected int resetPosition; + + public BufferInputStream(Buffer buffer) { + super(); + this.buffer = buffer; + this.position = 0; + this.resetPosition = -1; + } + + public int available() { + return buffer.getLength(); + } + + public void mark(int readlimit) { + resetPosition = position; + } + + public boolean markSupported() { + return true; + } + + public int read() { + return buffer.readByte(position++); + } + + public int read(byte[] b) { + int n = buffer.readBytes(position, b); + position += n; + return n; + } + + public int read(byte[] b, int off, int len) { + int n = buffer.readBytesInto(position, b, off, len); + position += n; + return n; + } + + public void reset() throws IOException { + if (resetPosition < 0) + throw new IOException("cannot reset because mark never set"); + if (resetPosition >= buffer.getLength()) + throw new IOException("cannot reset because mark set outside of buffer"); + + position = resetPosition; + } +} diff --git a/platform/java/src/com/artifex/mupdf/fitz/BufferOutputStream.java b/platform/java/src/com/artifex/mupdf/fitz/BufferOutputStream.java new file mode 100644 index 00000000..ec87db0c --- /dev/null +++ b/platform/java/src/com/artifex/mupdf/fitz/BufferOutputStream.java @@ -0,0 +1,66 @@ +package com.artifex.mupdf.fitz; + +import java.io.IOException; +import java.io.OutputStream; + +public class BufferOutputStream extends OutputStream +{ + protected Buffer buffer; + protected int position; + protected int resetPosition; + + public BufferOutputStream(Buffer buffer) { + super(); + this.buffer = buffer; + this.position = 0; + } + + public void write(byte[] b) { + buffer.writeBytes(b); + } + + public void write(byte[] b, int off, int len) { + buffer.writeBytesFrom(b, off, len); + } + + public void write(int b) { + buffer.writeByte((byte) b); + } + + public int available() { + return buffer.getLength(); + } + + public void mark(int readlimit) { + resetPosition = position; + } + + public boolean markSupported() { + return true; + } + + public int read() { + return buffer.readByte(position++); + } + + public int read(byte[] b) { + int n = buffer.readBytes(position, b); + position += n; + return n; + } + + public int read(byte[] b, int off, int len) { + int n = buffer.readBytesInto(position, b, off, len); + position += n; + return n; + } + + public void reset() throws IOException { + if (resetPosition < 0) + throw new IOException("cannot reset because mark never set"); + if (resetPosition >= buffer.getLength()) + throw new IOException("cannot reset because mark set outside of buffer"); + + position = resetPosition; + } +} |