--- a/jdk/src/java.base/share/classes/java/util/zip/Adler32.java Fri Nov 21 16:05:11 2014 +0100
+++ b/jdk/src/java.base/share/classes/java/util/zip/Adler32.java Fri Nov 21 09:28:53 2014 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -34,9 +34,8 @@
* can be computed much faster.
*
* <p> Passing a {@code null} argument to a method in this class will cause
- * a {@link NullPointerException} to be thrown.
+ * a {@link NullPointerException} to be thrown.</p>
*
- * @see Checksum
* @author David Connelly
*/
public
@@ -53,9 +52,8 @@
/**
* Updates the checksum with the specified byte (the low eight
* bits of the argument b).
- *
- * @param b the byte to update the checksum with
*/
+ @Override
public void update(int b) {
adler = update(adler, b);
}
@@ -63,11 +61,12 @@
/**
* Updates the checksum with the specified array of bytes.
*
- * @throws ArrayIndexOutOfBoundsException
- * if {@code off} is negative, or {@code len} is negative,
- * or {@code off+len} is greater than the length of the
- * array {@code b}
+ * @throws ArrayIndexOutOfBoundsException
+ * if {@code off} is negative, or {@code len} is negative, or
+ * {@code off+len} is negative or greater than the length of
+ * the array {@code b}.
*/
+ @Override
public void update(byte[] b, int off, int len) {
if (b == null) {
throw new NullPointerException();
@@ -79,28 +78,15 @@
}
/**
- * Updates the checksum with the specified array of bytes.
- *
- * @param b the byte array to update the checksum with
- */
- public void update(byte[] b) {
- adler = updateBytes(adler, b, 0, b.length);
- }
-
-
- /**
* Updates the checksum with the bytes from the specified buffer.
*
- * The checksum is updated using
- * buffer.{@link java.nio.Buffer#remaining() remaining()}
- * bytes starting at
- * buffer.{@link java.nio.Buffer#position() position()}
- * Upon return, the buffer's position will be updated to its
- * limit; its limit will not have been changed.
+ * The checksum is updated with the remaining bytes in the buffer, starting
+ * at the buffer's position. Upon return, the buffer's position will be
+ * updated to its limit; its limit will not have been changed.
*
- * @param buffer the ByteBuffer to update the checksum with
* @since 1.8
*/
+ @Override
public void update(ByteBuffer buffer) {
int pos = buffer.position();
int limit = buffer.limit();
@@ -113,9 +99,12 @@
} else if (buffer.hasArray()) {
adler = updateBytes(adler, buffer.array(), pos + buffer.arrayOffset(), rem);
} else {
- byte[] b = new byte[rem];
- buffer.get(b);
- adler = updateBytes(adler, b, 0, b.length);
+ byte[] b = new byte[Math.min(buffer.remaining(), 4096)];
+ while (buffer.hasRemaining()) {
+ int length = Math.min(buffer.remaining(), b.length);
+ buffer.get(b, 0, length);
+ update(b, 0, length);
+ }
}
buffer.position(limit);
}
@@ -123,6 +112,7 @@
/**
* Resets the checksum to initial value.
*/
+ @Override
public void reset() {
adler = 1;
}
@@ -130,6 +120,7 @@
/**
* Returns the checksum value.
*/
+ @Override
public long getValue() {
return (long)adler & 0xffffffffL;
}