Beispiel #1
0
        public int Read(sbyte[] toRead, int offset, int length)
        {
            // Read
            int  currentByte   = 0;
            bool canReadStream = true;

            while (currentByte < length && canReadStream)
            {
                if (m_NumForwardBytesInBuffer > 0)
                {
                    // from mem
                    m_NumForwardBytesInBuffer--;
                    toRead[offset + currentByte] = (sbyte)m_CircularByteBuffer[m_NumForwardBytesInBuffer];
                    currentByte++;
                }
                else
                {
                    // from stream
                    int newBytes = length - currentByte;
                    int numRead  = m_Stream.Read(m_TemporaryBuffer, 0, newBytes);
                    canReadStream = numRead >= newBytes;
                    for (int i = 0; i < numRead; i++)
                    {
                        m_CircularByteBuffer.Push(m_TemporaryBuffer[i]);
                        toRead[offset + currentByte + i] = (sbyte)m_TemporaryBuffer[i];
                    }
                    currentByte += numRead;
                }
            }
            return(currentByte);
        }