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