code: public void decode(byte data[], OutputStream uncompData) {
          
          if(data[0] == (byte)0x00 && data[1] == (byte)0x01) {
              throw new RuntimeException("LZW flavour not supported.");
          }
          
          initializeStringTable();
          
          this.data = data;
          this.uncompData = uncompData;
          
          // Initialize pointers
          bytePointer = 0;
          bitPointer = 0;
          
          nextData = 0;
          nextBits = 0;
          
          int code, oldCode = 0;
          byte string[];
          
          while ((code = getNextCode()) != 257) {
              
              if (code == 256) {
                  
                  initializeStringTable();
                  code = getNextCode();
                  
                  if (code == 257) {
                      break;
                  }
                  
                  writeString(stringTable[code]);
                  oldCode = code;
                  
              } else {
                  
                  if (code < tableIndex) {
                      
                      string = stringTable[code];
                      
                      writeString(string);
                      addStringToTable(stringTable[oldCode], string[0]);
                      oldCode = code;
                      
                  } else {
                      
                      string = stringTable[oldCode];
                      string = composeString(string, string[0]);
                      writeString(string);
                      addStringToTable(string);
                      oldCode = code;
                  }
              }
          }
      }
docs: Method to decode LZW compressed data.
  
  @param data            The compressed data.
  @param uncompData      Array to return the uncompressed data in.