Skip to content
This repository was archived by the owner on Dec 2, 2025. It is now read-only.

Commit 67fcb1e

Browse files
committed
Added option to compress/decompress using memory pointers
1 parent d08f929 commit 67fcb1e

6 files changed

Lines changed: 76 additions & 16 deletions

File tree

src/java/net/jpountz/lz4/LZ4HCJNICompressor.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,8 @@ public int compress(ByteBuffer src, int srcOff, int srcLen, ByteBuffer dest, int
8585
return safeInstance.compress(src, srcOff, srcLen, dest, destOff, maxDestLen);
8686
}
8787
}
88+
89+
public int compress(long srcAddr, int srcLen, long destAddr, int maxDestLen, int compressionLevel) {
90+
return LZ4JNI.LZ4_compressHC_addr(srcAddr, srcLen, destAddr, maxDestLen, compressionLevel);
91+
}
8892
}

src/java/net/jpountz/lz4/LZ4JNI.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,8 @@ enum LZ4JNI {
3737
static native int LZ4_decompress_safe(byte[] srcArray, ByteBuffer srcBuffer, int srcOff, int srcLen, byte[] destArray, ByteBuffer destBuffer, int destOff, int maxDestLen);
3838
static native int LZ4_compressBound(int len);
3939

40+
static native int LZ4_compress_addr(long srcAddr, int srcLen, long destAddr, int maxDestLen);
41+
static native int LZ4_compressHC_addr(long srcAddr, int srcLen, long destAddr, int maxDestLen, int compressionLevel);
42+
static native int LZ4_decompress_fast_addr(long srcAddr, long destAddr, int maxDestLen);
43+
static native int LZ4_decompress_safe_addr(long srcAddr, int srcLen, long destAddr, int maxDestLen);
4044
}
41-

src/java/net/jpountz/lz4/LZ4JNICompressor.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,8 @@ public int compress(ByteBuffer src, int srcOff, int srcLen, ByteBuffer dest, int
7777
return safeInstance.compress(src, srcOff, srcLen, dest, destOff, maxDestLen);
7878
}
7979
}
80+
81+
public int compress(long srcAddr, int srcLen, long destAddr, int maxDestLen) {
82+
return LZ4JNI.LZ4_compress_addr(srcAddr, srcLen, destAddr, maxDestLen);
83+
}
8084
}

src/java/net/jpountz/lz4/LZ4JNIFastDecompressor.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,8 @@ public int decompress(ByteBuffer src, int srcOff, ByteBuffer dest, int destOff,
7979
}
8080
}
8181

82+
public int decompress(long srcAddr, long destAddr, int maxDestLen) {
83+
return LZ4JNI.LZ4_decompress_fast_addr(srcAddr, destAddr, maxDestLen);
84+
}
85+
8286
}

src/java/net/jpountz/lz4/LZ4JNISafeDecompressor.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,8 @@ public int decompress(ByteBuffer src, int srcOff, int srcLen, ByteBuffer dest, i
7878
}
7979
}
8080

81+
public int decompress(long srcAddr, int srcLen, long destAddr, int maxDestLen) {
82+
return LZ4JNI.LZ4_decompress_safe_addr(srcAddr, srcLen, destAddr, maxDestLen);
83+
}
84+
8185
}

src/jni/net_jpountz_lz4_LZ4JNI.c

Lines changed: 56 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ JNIEXPORT jint JNICALL Java_net_jpountz_lz4_LZ4JNI_LZ4_1compressHC
9494
char* in;
9595
char* out;
9696
jint compressed;
97-
97+
9898
if (srcArray != NULL) {
9999
in = (char*) (*env)->GetPrimitiveArrayCritical(env, srcArray, 0);
100100
} else {
@@ -104,7 +104,7 @@ JNIEXPORT jint JNICALL Java_net_jpountz_lz4_LZ4JNI_LZ4_1compressHC
104104
if (in == NULL) {
105105
throw_OOM(env);
106106
return 0;
107-
}
107+
}
108108

109109
if (destArray != NULL) {
110110
out = (char*) (*env)->GetPrimitiveArrayCritical(env, destArray, 0);
@@ -141,24 +141,24 @@ JNIEXPORT jint JNICALL Java_net_jpountz_lz4_LZ4JNI_LZ4_1decompress_1fast
141141
char* in;
142142
char* out;
143143
jint compressed;
144-
144+
145145
if (srcArray != NULL) {
146146
in = (char*) (*env)->GetPrimitiveArrayCritical(env, srcArray, 0);
147147
} else {
148148
in = (char*) (*env)->GetDirectBufferAddress(env, srcBuffer);
149-
}
150-
149+
}
150+
151151
if (in == NULL) {
152152
throw_OOM(env);
153153
return 0;
154-
}
155-
154+
}
155+
156156
if (destArray != NULL) {
157157
out = (char*) (*env)->GetPrimitiveArrayCritical(env, destArray, 0);
158158
} else {
159159
out = (char*) (*env)->GetDirectBufferAddress(env, destBuffer);
160-
}
161-
160+
}
161+
162162
if (out == NULL) {
163163
throw_OOM(env);
164164
return 0;
@@ -177,6 +177,47 @@ JNIEXPORT jint JNICALL Java_net_jpountz_lz4_LZ4JNI_LZ4_1decompress_1fast
177177

178178
}
179179

180+
/*
181+
* Class: net_jpountz_lz4_LZ4JNI
182+
* Method: LZ4_compress_addr
183+
* Signature: (JIJI)I
184+
*/
185+
JNIEXPORT jint JNICALL Java_net_jpountz_lz4_LZ4JNI_LZ4_1compress_1addr
186+
(JNIEnv *env, jclass cls, jlong srcAddr, jint srcLen, jlong destAddr, jint maxDestLen) {
187+
return LZ4_compress_default((const char*) srcAddr, (char*) destAddr, srcLen, maxDestLen);
188+
}
189+
190+
/*
191+
* Class: net_jpountz_lz4_LZ4JNI
192+
* Method: LZ4_compressHC_addr
193+
* Signature: (JIJII)I
194+
*/
195+
JNIEXPORT jint JNICALL Java_net_jpountz_lz4_LZ4JNI_LZ4_1compressHC_1addr
196+
(JNIEnv *env, jclass cls, jlong srcAddr, jint srcLen, jlong destAddr, jint maxDestLen,
197+
int compressionLevel) {
198+
return LZ4_compress_HC((const char*) srcAddr, (char*) destAddr, srcLen, maxDestLen, compressionLevel);
199+
}
200+
201+
/*
202+
* Class: net_jpountz_lz4_LZ4JNI
203+
* Method: LZ4_decompress_fast_addr
204+
* Signature: (JJI)I
205+
*/
206+
JNIEXPORT jint JNICALL Java_net_jpountz_lz4_LZ4JNI_LZ4_1decompress_1fast_1addr
207+
(JNIEnv *env, jclass cls, jlong srcAddr, jlong destAddr, jint maxDestLen) {
208+
return LZ4_decompress_fast((const char*) srcAddr, (char*) destAddr, maxDestLen);
209+
}
210+
211+
/*
212+
* Class: net_jpountz_lz4_LZ4JNI
213+
* Method: LZ4_decompress_safe_addr
214+
* Signature: (JIJI)I
215+
*/
216+
JNIEXPORT jint JNICALL Java_net_jpountz_lz4_LZ4JNI_LZ4_1decompress_1safe_1addr
217+
(JNIEnv *env, jclass cls, jlong srcAddr, jint srcLen, jlong destAddr, jint maxDestLen) {
218+
return LZ4_decompress_safe((const char*) srcAddr, (char*) destAddr, srcLen, maxDestLen);
219+
}
220+
180221
/*
181222
* Class: net_jpountz_lz4_LZ4JNI
182223
* Method: LZ4_decompress_safe
@@ -193,19 +234,19 @@ JNIEXPORT jint JNICALL Java_net_jpountz_lz4_LZ4JNI_LZ4_1decompress_1safe
193234
in = (char*) (*env)->GetPrimitiveArrayCritical(env, srcArray, 0);
194235
} else {
195236
in = (char*) (*env)->GetDirectBufferAddress(env, srcBuffer);
196-
}
197-
237+
}
238+
198239
if (in == NULL) {
199240
throw_OOM(env);
200241
return 0;
201-
}
202-
242+
}
243+
203244
if (destArray != NULL) {
204245
out = (char*) (*env)->GetPrimitiveArrayCritical(env, destArray, 0);
205246
} else {
206247
out = (char*) (*env)->GetDirectBufferAddress(env, destBuffer);
207-
}
208-
248+
}
249+
209250
if (out == NULL) {
210251
throw_OOM(env);
211252
return 0;

0 commit comments

Comments
 (0)