77import java .io .ByteArrayOutputStream ;
88import java .math .BigInteger ;
99import java .nio .ByteBuffer ;
10- import java .nio .charset .StandardCharsets ;
10+ import java .nio .charset .Charset ;
1111import java .util .ArrayList ;
1212import java .util .HashMap ;
1313import java .util .List ;
@@ -65,6 +65,7 @@ public Object decodeMessage(ByteBuffer message) {
6565 return value ;
6666 }
6767
68+ private static final Charset UTF8 = Charset .forName ("UTF8" );
6869 private static final byte NULL = 0 ;
6970 private static final byte TRUE = 1 ;
7071 private static final byte FALSE = 2 ;
@@ -84,7 +85,7 @@ private static void writeSize(ByteArrayOutputStream stream, int value) {
8485 assert 0 <= value ;
8586 if (value < 254 ) {
8687 stream .write (value );
87- } else if (value < 0xffff ) {
88+ } else if (value <= 0xffff ) {
8889 stream .write (254 );
8990 stream .write (value >>> 8 );
9091 stream .write (value );
@@ -150,13 +151,13 @@ static void writeValue(ByteArrayOutputStream stream, Object value) {
150151 } else if (value instanceof BigInteger ) {
151152 stream .write (BIGINT );
152153 writeBytes (stream ,
153- ((BigInteger ) value ).toString (16 ).getBytes (StandardCharsets . UTF_8 ));
154+ ((BigInteger ) value ).toString (16 ).getBytes (UTF8 ));
154155 } else {
155156 throw new IllegalArgumentException ("Unsupported Number type: " + value .getClass ());
156157 }
157158 } else if (value instanceof String ) {
158159 stream .write (STRING );
159- writeBytes (stream , ((String ) value ).getBytes (StandardCharsets . UTF_8 ));
160+ writeBytes (stream , ((String ) value ).getBytes (UTF8 ));
160161 } else if (value instanceof byte []) {
161162 stream .write (BYTE_ARRAY );
162163 writeBytes (stream , (byte []) value );
@@ -259,15 +260,15 @@ static Object readValue(ByteBuffer buffer) {
259260 break ;
260261 case BIGINT : {
261262 final byte [] hex = readBytes (buffer );
262- result = new BigInteger (new String (hex , StandardCharsets . UTF_8 ), 16 );
263+ result = new BigInteger (new String (hex , UTF8 ), 16 );
263264 break ;
264265 }
265266 case DOUBLE :
266267 result = buffer .getDouble ();
267268 break ;
268269 case STRING : {
269270 final byte [] bytes = readBytes (buffer );
270- result = new String (bytes , StandardCharsets . UTF_8 );
271+ result = new String (bytes , UTF8 );
271272 break ;
272273 }
273274 case BYTE_ARRAY : {
0 commit comments