public String read(ByteBuffer buf,DictionaryCache dict){
  StringBuilder out=new StringBuilder();
  if (pre != null)   out.append(pre);
  if (type == VOID)   return out.toString();
  if (type == NULL) {
    out.append("null");
    return out.toString();
  }
  if (type == BYTE) {
    out.append(buf.get());
    return out.toString();
  }
  if (type == SHORT) {
    out.append(buf.getShort());
    return out.toString();
  }
  if (type == INT) {
    out.append(buf.getInt());
    return out.toString();
  }
  if (type == LONG) {
    out.append(buf.getLong());
    return out.toString();
  }
  if (type == DOUBLE) {
    out.append(buf.getDouble());
    return out.toString();
  }
  if (type == BOOLEAN) {
    out.append((buf.get() == 0 ? "false" : "true"));
    return out.toString();
  }
  if (type == STRING) {
    short pos=buf.getShort();
    if (pos > -1) {
      out.append("\"");
      out.append(dict.get(pos));
      out.append("\"");
    }
 else {
      int size=0;
      int val=buf.get() & 0xFF;
      while (val == 255) {
        size+=val;
        val=buf.get() & 0xFF;
      }
      size+=val;
      byte[] data=new byte[size];
      buf.get(data);
      out.append("\"");
      out.append(new String(data,StandardCharsets.UTF_8));
      out.append("\"");
    }
    return out.toString();
  }
  return null;
}

public String read ( ByteBuffer buf , DictionaryCache dict ) { StringBuilder out = new StringBuilder ( ) ; if ( pre != null ) out . append ( pre ) ; if ( type == VOID ) return out . toString ( ) ; if ( type == NULL ) { out . append ( "null" ) ; return out . toString ( ) ; } if ( type == BYTE ) { out . append ( buf . get ( ) ) ; return out . toString ( ) ; } if ( type == SHORT ) { out . append ( buf . getShort ( ) ) ; return out . toString ( ) ; } if ( type == INT ) { out . append ( buf . getInt ( ) ) ; return out . toString ( ) ; } if ( type == LONG ) { out . append ( buf . getLong ( ) ) ; return out . toString ( ) ; } if ( type == DOUBLE ) { out . append ( buf . getDouble ( ) ) ; return out . toString ( ) ; } if ( type == BOOLEAN ) { out . append ( ( buf . get ( ) == 0 ? "false" : "true" ) ) ; return out . toString ( ) ; } if ( type == STRING ) { short pos = buf . getShort ( ) ; if ( pos > - 1 ) { out . append ( "\"" ) ; out . append ( dict . get ( pos ) ) ; out . append ( "\"" ) ; } else { int size = 0 ; int val = buf . get ( ) & 0xFF ; while ( val == 255 ) { size += val ; val = buf . get ( ) & 0xFF ; } size += val ; byte [ ] data = new byte [ size ] ; buf . get ( data ) ; out . append ( "\"" ) ; out . append ( new String ( data , StandardCharsets . UTF_8 ) ) ; out . append ( "\"" ) ; } return out . toString ( ) ; } return null ; }
read this segment from a byte buffer using the given dictionary for lookups . the dictionary may be null if no dictionary values were used when writing data for this segment .
