public void Extract(SequentialReader reader, HuffmanTablesDirectory directory) { try { while (reader.Available() > 0) { byte header = reader.GetByte(); HuffmanTableClass tableClass = HuffmanTable.TypeOf((header & 0xF0) >> 4); int tableDestinationId = header & 0xF; byte[] lBytes = GetBytes(reader, 16); int vCount = 0; foreach (byte b in lBytes) { vCount += (b & 0xFF); } byte[] vBytes = GetBytes(reader, vCount); directory.AddTable(new HuffmanTable(tableClass, tableDestinationId, lBytes, vBytes)); } } catch (IOException me) { directory.AddError(me.ToString()); } }
public HuffmanTable(HuffmanTableClass tableClass, int tableDestinationId, byte[] lengthBytes, byte[] valueBytes) { _lengthBytes = lengthBytes ?? throw new ArgumentNullException(nameof(lengthBytes)); _valueBytes = valueBytes ?? throw new ArgumentNullException(nameof(valueBytes)); TableClass = tableClass; TableDestinationId = tableDestinationId; TableLength = _valueBytes.Length + 17; }