code: public static String readString(ByteBuffer buffer, boolean utf8) {
          if (utf8) {
              //  The lengths are encoded in the same way as for the 16-bit format
              // but using 8-bit rather than 16-bit integers.
              int strLen = readLen(buffer);
              int bytesLen = readLen(buffer);
              byte[] bytes = Buffers.readBytes(buffer, bytesLen);
              String str = new String(bytes, charsetUTF8);
              // zero
              int trailling = Buffers.readUByte(buffer);
              return str;
          } else {
              // The length is encoded as either one or two 16-bit integers as per the commentRef...
              int strLen = readLen16(buffer);
              String str = Buffers.readString(buffer, strLen);
              // zero
              int trailling = Buffers.readUShort(buffer);
              return str;
          }
      }
docs: read string from input buffer. if get EOF before read enough data, throw IOException.