示例#1
0
        public int copyStored(StreamManipulator input, int len)
        {
            len = Math.Min(Math.Min(len, WINDOW_SIZE - window_filled),
                   input.getAvailableBytes());
            int copied;

            int tailLen = WINDOW_SIZE - window_end;
            if (len > tailLen)
            {
                copied = input.copyBytes(window, window_end, tailLen);
                if (copied == tailLen)
                    copied += input.copyBytes(window, 0, len - tailLen);
            }
            else
                copied = input.copyBytes(window, window_end, len);

            window_end = (window_end + copied) & WINDOW_MASK;
            window_filled += copied;
            return copied;
        }