package huffman import ( . "huffman/internal/io" "io" ) func Decode(reader io.ReadSeeker, writer io.Writer) { bufReader := NewBufferedReader(reader) bufWriter := NewBufferedWriter(writer) tree := DecodeTree(bufReader) if tree.Size == 1 { lg := int(bufReader.ReadByte()) size := int(bufReader.ReadBits(lg)) for i := 0; i < size; i++ { bufWriter.WriteByte(tree.Value) } } else { additionalBits := bufReader.ReadBits(3) bufReader.SetLastBitsSkip(int(additionalBits)) curNode := tree for !bufReader.IsEOF() { if bufReader.ReadBit() == 0x0 { curNode = curNode.Left } else { curNode = curNode.Right } if curNode.IsTerminate() { bufWriter.WriteByte(curNode.Value) curNode = tree } } } bufWriter.Flush() }