You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by cu...@apache.org on 2013/02/04 22:58:45 UTC

svn commit: r1442391 - in /avro/trunk: CHANGES.txt lang/java/trevni/core/src/main/java/org/apache/trevni/InputBuffer.java

Author: cutting
Date: Mon Feb  4 21:58:45 2013
New Revision: 1442391

URL: http://svn.apache.org/viewvc?rev=1442391&view=rev
Log:
AVRO-1241. Java: Optimize Trevni string input.  Contributed by Joseph Adler.

Modified:
    avro/trunk/CHANGES.txt
    avro/trunk/lang/java/trevni/core/src/main/java/org/apache/trevni/InputBuffer.java

Modified: avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1442391&r1=1442390&r2=1442391&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Mon Feb  4 21:58:45 2013
@@ -25,6 +25,8 @@ Trunk (not yet released)
     AVRO-1232. Java: Add a toString() method to AvroWrapper so that it
     works with TextOutputFormat.  (Garrett Wu via cutting)
 
+    AVRO-1241. Java: Optimize Trevni string input. (Joseph Adler via cutting)
+
   BUG FIXES
 
     AVRO-1231. Java: Fix Trevni shredder to work on non-recursive

Modified: avro/trunk/lang/java/trevni/core/src/main/java/org/apache/trevni/InputBuffer.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/trevni/core/src/main/java/org/apache/trevni/InputBuffer.java?rev=1442391&r1=1442390&r2=1442391&view=diff
==============================================================================
--- avro/trunk/lang/java/trevni/core/src/main/java/org/apache/trevni/InputBuffer.java (original)
+++ avro/trunk/lang/java/trevni/core/src/main/java/org/apache/trevni/InputBuffer.java Mon Feb  4 21:58:45 2013
@@ -21,6 +21,7 @@ import java.io.EOFException;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.nio.charset.Charset;
+import java.nio.charset.CharsetDecoder;
 
 /** Used to read values. */
 class InputBuffer {
@@ -33,6 +34,8 @@ class InputBuffer {
   private int pos;                                // position within buffer
   private int limit;                              // end of valid buffer data
 
+  private CharsetDecoder utf8 = Charset.forName("UTF-8").newDecoder();
+  
   private int bitCount;                           // position in booleans
 
   public InputBuffer(Input in) throws IOException { this(in, 0); }
@@ -274,18 +277,16 @@ class InputBuffer {
     return (readFixed32() & 0xFFFFFFFFL) | (((long)readFixed32()) << 32);
   }
 
-  private static final Charset UTF8 = Charset.forName("UTF-8");
-
   public String readString() throws IOException {
     int length = readInt();
     if (length <= (limit - pos)) {                        // in buffer
-      String result = new String(buf, pos, length, UTF8); // read directly
+      String result = utf8.decode(ByteBuffer.wrap(buf, pos, length)).toString();
       pos += length;
       return result;
     }
     byte[] bytes = new byte[length];
     readFully(bytes, 0, length);
-    return new String(bytes, 0, length, UTF8);
+    return utf8.decode(ByteBuffer.wrap(bytes, 0, length)).toString();
   }  
 
   public byte[] readBytes() throws IOException {