summaryrefslogtreecommitdiff
path: root/platform/java/src/com
diff options
context:
space:
mode:
authorSebastian Rasmussen <sebras@gmail.com>2016-07-17 16:50:37 +0800
committerSebastian Rasmussen <sebras@gmail.com>2016-07-17 22:33:52 +0800
commit8b6cc5f00e4d3f1a43e677a43a2a809f6132a196 (patch)
tree9fc8f5d5f14d290e582185f971189c6bbd1bc9ea /platform/java/src/com
parent90bf2e01390bf77c91034dec06a1e6aabd8235ec (diff)
downloadmupdf-8b6cc5f00e4d3f1a43e677a43a2a809f6132a196.tar.xz
JNI: Add BufferInputStream, BufferOutputStream.
These are meant to make it easy to interact with mupdf's Buffer object in a normal Java fashion.
Diffstat (limited to 'platform/java/src/com')
-rw-r--r--platform/java/src/com/artifex/mupdf/fitz/BufferInputStream.java55
-rw-r--r--platform/java/src/com/artifex/mupdf/fitz/BufferOutputStream.java66
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;
+ }
+}