From b5bee232b62fd514b2094eb3f3a84e21bc4b5127 Mon Sep 17 00:00:00 2001
From: Steffen Friedrich <friedrich@informatik.uni-hamburg.de>
Date: Tue, 9 Jun 2015 11:05:06 +0200
Subject: [PATCH] [core]  ByteIterators `toString()` method now uses 
 java.nio.CharBuffer to decode the byte array.

---
 core/src/main/java/com/yahoo/ycsb/ByteIterator.java | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/core/src/main/java/com/yahoo/ycsb/ByteIterator.java b/core/src/main/java/com/yahoo/ycsb/ByteIterator.java
index 9bb3b63e..568cdc1d 100644
--- a/core/src/main/java/com/yahoo/ycsb/ByteIterator.java
+++ b/core/src/main/java/com/yahoo/ycsb/ByteIterator.java
@@ -16,8 +16,10 @@
  */
 package com.yahoo.ycsb;
 
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.Charset;
 import java.util.Iterator;
-import java.util.ArrayList;
 /**
  * YCSB-specific buffer class.  ByteIterators are designed to support
  * efficient field generation, and to allow backend drivers that can stream
@@ -73,10 +75,11 @@ public abstract class ByteIterator implements Iterator<Byte> {
 
 	/** Consumes remaining contents of this object, and returns them as a string. */
 	public String toString() {
-		StringBuilder sb = new StringBuilder();
-		while(this.hasNext()) { sb.append((char)nextByte()); }
-		return sb.toString();
+		Charset cset = Charset.forName("UTF-8");
+		CharBuffer cb = cset.decode(ByteBuffer.wrap(this.toArray()));
+		return cb.toString();
 	}
+
 	/** Consumes remaining contents of this object, and returns them as a byte array. */
 	public byte[] toArray() {
 	    long left = bytesLeft();
-- 
GitLab