String decodeTextValue(byte[] data) throws IOException {
  boolean isCompressed=((data.length > 1) && (data[0] == TEXT_COMPRESSION_HEADER[0]) && (data[1] == TEXT_COMPRESSION_HEADER[1]));
  if (isCompressed) {
    StringBuilder textBuf=new StringBuilder(data.length);
    int dataStart=TEXT_COMPRESSION_HEADER.length;
    int dataEnd=dataStart;
    boolean inCompressedMode=true;
    while (dataEnd < data.length) {
      if (data[dataEnd] == (byte)0x00) {
        decodeTextSegment(data,dataStart,dataEnd,inCompressedMode,textBuf);
        inCompressedMode=!inCompressedMode;
        ++dataEnd;
        dataStart=dataEnd;
      }
 else {
        ++dataEnd;
      }
    }
    decodeTextSegment(data,dataStart,dataEnd,inCompressedMode,textBuf);
    return textBuf.toString();
  }
  return decodeUncompressedText(data,getCharset());
}

String decodeTextValue ( byte [ ] data ) throws IOException { boolean isCompressed = ( ( data . length > 1 ) && ( data [ 0 ] == TEXT_COMPRESSION_HEADER [ 0 ] ) && ( data [ 1 ] == TEXT_COMPRESSION_HEADER [ 1 ] ) ) ; if ( isCompressed ) { StringBuilder textBuf = new StringBuilder ( data . length ) ; int dataStart = TEXT_COMPRESSION_HEADER . length ; int dataEnd = dataStart ; boolean inCompressedMode = true ; while ( dataEnd < data . length ) { if ( data [ dataEnd ] == ( byte ) 0x00 ) { decodeTextSegment ( data , dataStart , dataEnd , inCompressedMode , textBuf ) ; inCompressedMode = ! inCompressedMode ; ++ dataEnd ; dataStart = dataEnd ; } else { ++ dataEnd ; } } decodeTextSegment ( data , dataStart , dataEnd , inCompressedMode , textBuf ) ; return textBuf . toString ( ) ; } return decodeUncompressedText ( data , getCharset ( ) ) ; }
decodes a compressed or uncompressed text value .
