diff options
author | Sebastian Rasmussen <sebras@gmail.com> | 2016-07-17 16:50:37 +0800 |
---|---|---|
committer | Sebastian Rasmussen <sebras@gmail.com> | 2016-07-17 22:33:52 +0800 |
commit | 8b6cc5f00e4d3f1a43e677a43a2a809f6132a196 (patch) | |
tree | 9fc8f5d5f14d290e582185f971189c6bbd1bc9ea /platform/java | |
parent | 90bf2e01390bf77c91034dec06a1e6aabd8235ec (diff) | |
download | mupdf-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')
-rw-r--r-- | platform/java/mupdf_native.h | 24 | ||||
-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 |
3 files changed, 145 insertions, 0 deletions
diff --git a/platform/java/mupdf_native.h b/platform/java/mupdf_native.h index e3902a21..3756eae9 100644 --- a/platform/java/mupdf_native.h +++ b/platform/java/mupdf_native.h @@ -184,6 +184,30 @@ JNIEXPORT void JNICALL Java_com_artifex_mupdf_fitz_Buffer_save } #endif #endif +/* Header for class com_artifex_mupdf_fitz_BufferInputStream */ + +#ifndef _Included_com_artifex_mupdf_fitz_BufferInputStream +#define _Included_com_artifex_mupdf_fitz_BufferInputStream +#ifdef __cplusplus +extern "C" { +#endif +#undef com_artifex_mupdf_fitz_BufferInputStream_MAX_SKIP_BUFFER_SIZE +#define com_artifex_mupdf_fitz_BufferInputStream_MAX_SKIP_BUFFER_SIZE 2048L +#ifdef __cplusplus +} +#endif +#endif +/* Header for class com_artifex_mupdf_fitz_BufferOutputStream */ + +#ifndef _Included_com_artifex_mupdf_fitz_BufferOutputStream +#define _Included_com_artifex_mupdf_fitz_BufferOutputStream +#ifdef __cplusplus +extern "C" { +#endif +#ifdef __cplusplus +} +#endif +#endif /* Header for class com_artifex_mupdf_fitz_ColorSpace */ #ifndef _Included_com_artifex_mupdf_fitz_ColorSpace 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; + } +} |