6341887: Inflater can't handle ByteBuffer - first webrev

Ulf Zibis Ulf.Zibis at gmx.de
Sat Apr 14 21:09:56 UTC 2012


Am 14.04.2012 10:28, schrieb Martin Kirst:
> WebRev here:
> http://dl.dropbox.com/u/52514330/6341887/webrev.00/index.html
>
> Feedback is welcome.

Superfluous (will be addressed by bbuffer.position()) :
  485         if (bbuffer == null) {
  486             throw new NullPointerException();
  487         }


Can (pos < 0 || limit < 0 || pos > limit) ?
I believe, all Bytebuffer implementations should ensure this already, so an assert operator would 
suffice.

Anyway, little simpler:
  491         final int pos = bbuffer.position();
  492         final int rem = bbuffer.remaining();
  493         if (pos < 0 || rem < 0) {
  494             throw new ArrayIndexOutOfBoundsException();
  495         }
No need to check rem < 0, so simply:
  497         if (rem == 0) return 0; // Z_OK = 0;
  ...
  511         bbuffer.position(pos + rem);  // maybe bbuffer.flip() ?

Can ByteBuffer not have array and not be instance of DirectBuffer ?
Compare to different decision in sun.nio.ch.Xyz.De/Encoder.de/encodeLoop(...) methods !

It seems, variable "off" is never used:
  190 JNIEXPORT jint JNICALL
  191 Java_java_util_zip_Deflater_deflateByteBuffer(JNIEnv *env, jobject this, jlong zsaddr,
  192                                          jlong bbaddr, jint off, jint len, jint flush)
  193 ...


-Ulf





More information about the core-libs-dev mailing list