public void FlushBuffer(EndianBinaryWriter writer)
        {
            int PutBuffer = this.bufferPutBuffer;
            int PutBits = this.bufferPutBits;
            while (PutBits >= 8)
            {
                int c = (PutBuffer >> 16) & 0xFF;
                writer.Write((byte)c);

                // FF must be escaped
                if (c == 0xFF) writer.Write(0);

                PutBuffer <<= 8;
                PutBits -= 8;
            }

            if (PutBits > 0)
            {
                int c = (PutBuffer >> 16) & 0xFF;
                writer.Write((byte)c);
            }
        }
        /// <summary>
        /// Uses an integer long (32 bits) buffer to store the Huffman encoded bits
        /// and sends them to outStream by the byte.
        /// </summary>
        private void bufferIt(EndianBinaryWriter writer, int code, int size)
        {
            int PutBuffer = code;
            int PutBits = this.bufferPutBits;

            PutBuffer &= (1 << size) - 1;
            PutBits += size;
            PutBuffer <<= 24 - PutBits;
            PutBuffer |= this.bufferPutBuffer;

            while (PutBits >= 8)
            {
                int c = (PutBuffer >> 16) & 0xFF;
                writer.Write((byte)c);

                // FF must be escaped
                if (c == 0xFF)
                {
                    writer.Write(0);
                }

                PutBuffer <<= 8;
                PutBits -= 8;
            }

            this.bufferPutBuffer = PutBuffer;
            this.bufferPutBits = PutBits;
        }