code: @Override
      public final String readUTF() throws IOException {
          int charCount = readInt();
          if (charCount == NULL_ARRAY_LENGTH) {
              return null;
          }
          if (charBuffer == null || charCount > charBuffer.length) {
              charBuffer = new char[charCount];
          }
          byte b;
          for (int i = 0; i < charCount; i++) {
              b = readByte();
              if (b < 0) {
                  charBuffer[i] = Bits.readUtf8Char(this, b);
              } else {
                  charBuffer[i] = (char) b;
              }
          }
          return new String(charBuffer, 0, charCount);
      }
docs: See the general contract of the {@code readUTF} method of {@code DataInput}.
  <p>
  Bytes for this operation are read from the contained input stream.
  
  @return a Unicode string.
  @throws java.io.EOFException           if this input stream reaches the end before reading all the bytes
  @throws java.io.IOException            if an I/O error occurs
  @throws java.io.UTFDataFormatException if the bytes do not represent a valid modified UTF-8 encoding of a string
  @see java.io.DataInputStream#readUTF(java.io.DataInput)