public static LineBuffer Pop() { LineBuffer buffer = null; if (!LineBUfferPool.TryPop(out buffer)) { return(new LineBuffer()); } buffer.Reset(); return(buffer); }
internal bool Import(byte[] data, int offset, int count) { offset += mImportOffset; count -= mImportOffset; while (count > 0) { if (Header == null) { if (mLineBuffer.Import(data, ref offset, ref count)) { Header = mLineBuffer.GetLineString(); if (Header[0] == '+') { ResultData = Header.Substring(1, Header.Length - 1); return(true); } else if (Header[0] == '-') { throw new Exception(Header.Substring(1, Header.Length - 1)); } else if (Header[0] == '$') { mResultCount = 1; mSingle = true; mItemLength = int.Parse(Header.Substring(1, Header.Length - 1)); } else if (Header[0] == '*') { mResultCount = int.Parse(Header.Substring(1, Header.Length - 1)); mSingle = false; } else if (Header[0] == ':') { ResultData = Header.Substring(1, Header.Length - 1); return(true); } else { throw new Exception($"header error:{Header}"); } ResultDataBlock = new List <ArraySegment <byte> >(mResultCount); mLineBuffer.Reset(); } } if (mResultCount == 0) { break; } mValidLength = true; //if (mItemLength == 0 && mResultCount >0) if (!mSingle && mResultCount > 0 && mReadCompleted) { mValidLength = mLineBuffer.Import(data, ref offset, ref count); if (mValidLength) { string line; try { line = mLineBuffer.GetLineString(); mItemLength = int.Parse(line.Substring(1, line.Length - 3)); mLineBuffer.Reset(); } catch (Exception e_) { throw e_; } } } if (mValidLength) { LoadData(data, ref offset, ref count); } } if (count < 0) { mImportOffset = Math.Abs(count); } else { mImportOffset = 0; } return(mItemLength == 0 && mResultCount == 0); }