示例#1
0
        private void ElapsedEventHandler()
        {
            if (_cancelationTokenSource.IsCancellationRequested)
            {
                return;
            }

            const int bufSize = 1000;

            byte[] buf    = new byte[bufSize];
            var    length = _rollingFileReader.Read(buf, 0, bufSize);

            while (length > 0)
            {
                if (_processContent(buf, 0, length))
                {
                    _rollingFileReader.Ack();
                }
                else
                {
                    _rollingFileReader.RollBack();
                    break;
                }
                length = _rollingFileReader.Read(buf, 0, bufSize);
            }
        }
示例#2
0
        public override string ReadLine()
        {
            bool bContinue = true;

            while (bContinue)
            {
                bContinue = false;
                if (currentPos == currentLen)
                {
                    currentLen = _reader.Read(_byteBuffer, 0, BUFFER_LENGTH);
                    currentPos = 0;
                }

                if (currentPos == currentLen)
                {
                    break;
                }

                int pos = -1;
                for (int i = currentPos; i != currentLen; ++i)
                {
                    if (_byteBuffer[i] == '\n') //TODO Unix/Mac style
                    {
                        pos = i;
                        break;
                    }
                }

                char[] chars;
                if (pos == -1)
                {
                    bContinue = true;
                    chars     = ASCIIEncoding.UTF8.GetChars(_byteBuffer, currentPos, currentLen - currentPos);
                    _sb.Append(chars);
                    currentPos = currentLen;
                }
                else
                {
                    chars = ASCIIEncoding.UTF8.GetChars(_byteBuffer, currentPos, pos - currentPos);
                    _sb.Append(chars);
                    var line = _sb.ToString();
                    _sb.Clear();
                    currentPos = pos + 1;//TODO \n\r
                    return(line);
                }
            }
            return(null);
        }