From a7b93ee3558e6da945991d61f64b4c7b44dd132f Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期一, 26 八月 2019 16:58:01 +0800 Subject: [PATCH] add direct read --- readwriter.go | 34 +++++++++++++++++++++++++++++++++- 1 files changed, 33 insertions(+), 1 deletions(-) diff --git a/readwriter.go b/readwriter.go index 523a605..c383769 100644 --- a/readwriter.go +++ b/readwriter.go @@ -56,8 +56,40 @@ return rw.name } -// Read +// DirectRead create byte in func +func (rw *ReadWriteCloser) DirectRead() ([]byte, error) { + buf, err := rw.GetReadBuffer() + if err != nil { + return nil, err + } + data := make([]byte, len(buf.Data)) + + copy(data, buf.Data) + isEOF := buf.Flags[eofFlagIndex]&eofFlagMask != 0 + + if err = rw.SendReadBuffer(buf); err != nil { + return nil, err + } + + if isEOF { + return nil, io.EOF + } + + return data, nil +} + +// Peek get length +func (rw *ReadWriteCloser) Peek() (n int, err error) { + buf, err := rw.GetReadBuffer() + if err != nil { + return 0, err + } + + return len(buf.Data), nil +} + +// Read func (rw *ReadWriteCloser) Read(p []byte) (n int, err error) { buf, err := rw.GetReadBuffer() if err != nil { -- Gitblit v1.8.0