You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by th...@apache.org on 2010/01/26 16:27:08 UTC
svn commit: r903266 - in /hadoop/avro/trunk: CHANGES.txt
lang/java/src/java/org/apache/avro/io/BinaryDecoder.java
Author: thiru
Date: Tue Jan 26 15:27:07 2010
New Revision: 903266
URL: http://svn.apache.org/viewvc?rev=903266&view=rev
Log:
AVRO-354. Performance improvement to BinaryDecoder.readInt()
Modified:
hadoop/avro/trunk/CHANGES.txt
hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/BinaryDecoder.java
Modified: hadoop/avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/CHANGES.txt?rev=903266&r1=903265&r2=903266&view=diff
==============================================================================
--- hadoop/avro/trunk/CHANGES.txt (original)
+++ hadoop/avro/trunk/CHANGES.txt Tue Jan 26 15:27:07 2010
@@ -272,6 +272,8 @@
AVRO-363. estSchema had two tests disabled; new test for named schemas
named after primitives. (philz)
+ AVRO-354. Performance improvement to BinaryDecoder.readInt() (Kevin Oliver via thiru)
+
BUG FIXES
AVRO-176. Safeguard against bad istreams before reading. (sbanacho)
Modified: hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/BinaryDecoder.java
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/BinaryDecoder.java?rev=903266&r1=903265&r2=903266&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/BinaryDecoder.java (original)
+++ hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/BinaryDecoder.java Tue Jan 26 15:27:07 2010
@@ -22,7 +22,6 @@
import java.io.InputStream;
import java.nio.ByteBuffer;
-import org.apache.avro.AvroTypeException;
import org.apache.avro.ipc.ByteBufferInputStream;
import org.apache.avro.util.Utf8;
@@ -105,11 +104,19 @@
@Override
public int readInt() throws IOException {
- long result = readLong();
- if (result < Integer.MIN_VALUE || Integer.MAX_VALUE < result) {
- throw new AvroTypeException("Integer overflow.");
+ int n = 0;
+ for (int shift = 0; ; shift += 7) {
+ int b = in.read();
+ if (b >= 0) {
+ n |= (b & 0x7F) << shift;
+ if ((b & 0x80) == 0) {
+ break;
+ }
+ } else {
+ throw new EOFException();
+ }
}
- return (int)result;
+ return (n >>> 1) ^ -(n & 1); // back to two's-complement
}
@Override