diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/PrintTools.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/PrintTools.java
index a9c4d15..0ccfa20 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/PrintTools.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/PrintTools.java
@@ -22,6 +22,7 @@
 import java.io.OutputStream;
 import java.io.PrintStream;
 import java.nio.charset.StandardCharsets;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.asterix.dataflow.data.nontagged.serde.ADoubleSerializerDeserializer;
 import org.apache.asterix.dataflow.data.nontagged.serde.AFloatSerializerDeserializer;
@@ -36,7 +37,7 @@
 public class PrintTools {
 
     private static final GregorianCalendarSystem gCalInstance = GregorianCalendarSystem.getInstance();
-    private static long CHRONON_OF_DAY = 24 * 60 * 60 * 1000;
+    private static final long CHRONON_OF_DAY = TimeUnit.DAYS.toMillis(1);
 
     public static void printDateString(byte[] b, int s, int l, PrintStream ps) throws HyracksDataException {
         long chrononTime = AInt32SerializerDeserializer.getInt(b, s + 1) * CHRONON_OF_DAY;
@@ -218,46 +219,56 @@
         }
     }
 
-    public static void printDoubleForJson(byte[] b, int s, PrintStream ps) throws HyracksDataException {
+    public static void printDoubleForJson(byte[] b, int s, PrintStream ps) {
         final double d = ADoubleSerializerDeserializer.getDouble(b, s + 1);
         if (Double.isFinite(d)) {
             ps.print(d);
         } else {
             ps.append('"');
-            ps.print(Double.isNaN(d) ? "NaN" : (d == Double.POSITIVE_INFINITY) ? "INF" : "-INF");
+            ps.print(printNonFiniteDouble(d));
             ps.append('"');
         }
     }
 
-    public static void printDouble(byte[] b, int s, PrintStream ps) throws HyracksDataException {
+    public static void printDouble(byte[] b, int s, PrintStream ps) {
         final double d = ADoubleSerializerDeserializer.getDouble(b, s + 1);
         if (Double.isFinite(d)) {
             ps.print(d);
         } else {
-            ps.print(Double.isNaN(d) ? "NaN" : (d == Double.POSITIVE_INFINITY) ? "INF" : "-INF");
+            ps.print(printNonFiniteDouble(d));
         }
     }
 
-    public static void printFloatForJson(byte[] b, int s, PrintStream ps) throws HyracksDataException {
+    public static void printFloatForJson(byte[] b, int s, PrintStream ps) {
         final float f = AFloatSerializerDeserializer.getFloat(b, s + 1);
         if (Float.isFinite(f)) {
             ps.print(f);
         } else {
             ps.print('"');
-            ps.print(Float.isNaN(f) ? "NaN" : (f == Float.POSITIVE_INFINITY) ? "INF" : "-INF");
+            ps.print(printNonFiniteFloat(f));
             ps.print('"');
         }
     }
 
-    public static void printFloat(byte[] b, int s, PrintStream ps) throws HyracksDataException {
+    public static void printFloat(byte[] b, int s, PrintStream ps) {
         final float f = AFloatSerializerDeserializer.getFloat(b, s + 1);
         if (Float.isFinite(f)) {
             ps.print(f);
         } else {
-            ps.print(Float.isNaN(f) ? "NaN" : (f == Float.POSITIVE_INFINITY) ? "INF" : "-INF");
+            ps.print(printNonFiniteFloat(f));
         }
     }
 
+    @SuppressWarnings("squid:S1244") // equality comparison w/ infinity is not problematic
+    private static String printNonFiniteDouble(double d) {
+        return Double.isNaN(d) ? "NaN" : d == Double.POSITIVE_INFINITY ? "INF" : "-INF";
+    }
+
+    @SuppressWarnings("squid:S1244") // equality comparison w/ infinity is not problematic
+    private static String printNonFiniteFloat(float f) {
+        return Float.isNaN(f) ? "NaN" : f == Float.POSITIVE_INFINITY ? "INF" : "-INF";
+    }
+
     public enum CASE {
         LOWER_CASE,
         UPPER_CASE,
@@ -382,8 +393,8 @@
         os.write('u');
         os.write('0');
         os.write('0');
-        os.write(HexPrinter.hex((c >>> 4) & 0x0f, HexPrinter.CASE.LOWER_CASE));
-        os.write(HexPrinter.hex(c & 0x0f, HexPrinter.CASE.LOWER_CASE));
+        os.write(HexPrinter.hex((c >>> 4) & 0x0f, HexPrinter.Case.LOWER_CASE));
+        os.write(HexPrinter.hex(c & 0x0f, HexPrinter.Case.LOWER_CASE));
     }
 
     /**
diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/bytes/HexPrinter.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/bytes/HexPrinter.java
index 5a9c064..d340526 100644
--- a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/bytes/HexPrinter.java
+++ b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/bytes/HexPrinter.java
@@ -22,26 +22,26 @@
 import java.io.IOException;
 
 public class HexPrinter {
-    public enum CASE {
-        LOWER_CASE,
-        UPPER_CASE,
+    public enum Case {
+        LOWER_CASE('a'),
+        UPPER_CASE('A');
+
+        private final char a;
+
+        Case(char a) {
+            this.a = a;
+        }
     }
 
-    public static byte hex(int i, CASE c) {
-        switch (c) {
-            case LOWER_CASE:
-                return (byte) (i < 10 ? i + '0' : i + ('a' - 10));
-            case UPPER_CASE:
-                return (byte) (i < 10 ? i + '0' : i + ('A' - 10));
-        }
-        return Byte.parseByte(null);
+    public static byte hex(int i, Case c) {
+        return (byte) (i < 10 ? i + '0' : i + (c.a - 10));
     }
 
     public static Appendable printHexString(byte[] bytes, int start, int length, Appendable appendable)
             throws IOException {
         for (int i = 0; i < length; ++i) {
-            appendable.append((char) hex((bytes[start + i] >>> 4) & 0x0f, CASE.UPPER_CASE));
-            appendable.append((char) hex((bytes[start + i] & 0x0f), CASE.UPPER_CASE));
+            appendable.append((char) hex((bytes[start + i] >>> 4) & 0x0f, Case.UPPER_CASE));
+            appendable.append((char) hex((bytes[start + i] & 0x0f), Case.UPPER_CASE));
         }
         return appendable;
     }
diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/string/UTF8StringReader.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/string/UTF8StringReader.java
index 27d6008..43faf18 100644
--- a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/string/UTF8StringReader.java
+++ b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/string/UTF8StringReader.java
@@ -22,12 +22,15 @@
 import java.io.DataInput;
 import java.io.EOFException;
 import java.io.IOException;
+import java.io.Serializable;
 import java.io.UTFDataFormatException;
 
-public class UTF8StringReader {
+public class UTF8StringReader implements Serializable {
 
-    byte[] bytearr = null;
-    char[] chararr = null;
+    private static final long serialVersionUID = 1L;
+
+    transient byte[] bytearr = null;
+    transient char[] chararr = null;
 
     /**
      * Reads from the
diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/string/UTF8StringUtil.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/string/UTF8StringUtil.java
index 9aa2b5d..f50fa90 100644
--- a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/string/UTF8StringUtil.java
+++ b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/string/UTF8StringUtil.java
@@ -33,6 +33,10 @@
  * Most of the codes were migrated from asterix-fuzzyjoin and hyracks-storage-am-invertedindex
  */
 public class UTF8StringUtil {
+
+    private UTF8StringUtil() {
+    }
+
     public static char charAt(byte[] b, int s) {
         if (s >= b.length) {
             throw new ArrayIndexOutOfBoundsException(s);
@@ -54,7 +58,7 @@
                 return (char) (((c & 0x1F) << 6) | ((b[s + 1]) & 0x3F));
 
             case 14:
-                return (char) (((c & 0x0F) << 12) | (((b[s + 1]) & 0x3F) << 6) | (((b[s + 2]) & 0x3F) << 0));
+                return (char) (((c & 0x0F) << 12) | (((b[s + 1]) & 0x3F) << 6) | (b[s + 2] & 0x3F));
 
             default:
                 throw new IllegalArgumentException();
@@ -80,8 +84,10 @@
 
             case 14:
                 return 3;
+
+            default:
+                throw new IllegalStateException();
         }
-        throw new IllegalStateException();
     }
 
     public static boolean isCharStart(byte[] b, int s) {
@@ -353,12 +359,9 @@
         }
         while (position < maxPosition) {
             char c = charAt(b, position);
-            switch (c) {
+            if (c == '\\' || c == '"') {
                 // escape
-                case '\\':
-                case '"':
-                    os.write('\\');
-                    break;
+                os.write('\\');
             }
             int sz = charSize(b, position);
             while (sz > 0) {
@@ -557,8 +560,7 @@
                     if (((char2 & 0xC0) != 0x80) || ((char3 & 0xC0) != 0x80)) {
                         throw new UTFDataFormatException("malformed input around byte " + (count - 1));
                     }
-                    chararr[chararr_count++] =
-                            (char) (((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0));
+                    chararr[chararr_count++] = (char) (((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | (char3 & 0x3F));
                     break;
                 default:
                     /* 10xx xxxx,  1111 xxxx */
@@ -648,10 +650,10 @@
         } else if (c > 0x07FF) {
             tempBytes[count++] = (byte) (0xE0 | ((c >> 12) & 0x0F));
             tempBytes[count++] = (byte) (0x80 | ((c >> 6) & 0x3F));
-            tempBytes[count++] = (byte) (0x80 | ((c >> 0) & 0x3F));
+            tempBytes[count++] = (byte) (0x80 | (c & 0x3F));
         } else {
             tempBytes[count++] = (byte) (0xC0 | ((c >> 6) & 0x1F));
-            tempBytes[count++] = (byte) (0x80 | ((c >> 0) & 0x3F));
+            tempBytes[count++] = (byte) (0x80 | (c & 0x3F));
         }
         return count - orig;
     }
@@ -661,10 +663,10 @@
         if (writer == null) {
             tempBytes = new byte[utflen + 5];
         } else {
-            if (writer.getTempBytes() == null || writer.getTempBytes().length < utflen + 5) {
-                writer.setTempBytes(new byte[utflen + 5]);
+            if (writer.tempBytes == null || writer.tempBytes.length < utflen + 5) {
+                writer.tempBytes = new byte[utflen + 5];
             }
-            tempBytes = writer.getTempBytes();
+            tempBytes = writer.tempBytes;
         }
         return tempBytes;
     }
diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/string/UTF8StringWriter.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/string/UTF8StringWriter.java
index 3d9a7c5..563f865 100644
--- a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/string/UTF8StringWriter.java
+++ b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/string/UTF8StringWriter.java
@@ -25,7 +25,7 @@
 public class UTF8StringWriter implements Serializable {
 
     private static final long serialVersionUID = 1L;
-    private byte[] tempBytes;
+    transient byte[] tempBytes;
 
     public final void writeUTF8(CharSequence str, DataOutput out) throws IOException {
         UTF8StringUtil.writeUTF8(str, out, this);
@@ -35,12 +35,4 @@
         UTF8StringUtil.writeUTF8(buffer, start, length, out, this);
     }
 
-    public byte[] getTempBytes() {
-        return tempBytes;
-    }
-
-    public void setTempBytes(byte[] tempBytes) {
-        this.tempBytes = tempBytes;
-    }
-
 }
