本文整理汇总了Golang中bufio.Reader.Peek方法的典型用法代码示例。如果您正苦于以下问题:Golang Reader.Peek方法的具体用法?Golang Reader.Peek怎么用?Golang Reader.Peek使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类bufio.Reader
的用法示例。
在下文中一共展示了Reader.Peek方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: readWhile
func readWhile(f func(r rune) bool, in *bufio.Reader) (read []byte, err error) {
read = make([]byte, 0, 1)
next := make([]byte, 1)
var b byte
next, _ = in.Peek(1)
for len(next) > 0 && f(rune(next[0])) {
b, err = in.ReadByte()
if err != nil {
return
}
if b == '\\' {
b, err = in.ReadByte()
actualByte, ok := escapedLetters[b]
if ok {
b = actualByte
}
if err != nil {
return
}
}
read = append(read, b)
next, _ = in.Peek(1)
}
return
}
示例2: DeserializeByReader
func (self ProtobufProbe) DeserializeByReader(reader *bufio.Reader) (*protocol.MobileSuiteModel, int32, error) {
lengthByte, _ := reader.Peek(4)
lengthBuff := bytes.NewBuffer(lengthByte)
var length int32
err := binary.Read(lengthBuff, binary.LittleEndian, &length)
if err != nil {
log.Error("when deserializeByReader:", err.Error())
return nil, -1, err
}
if int32(reader.Buffered()) < length+4 {
log.Error("int32(reader.Buffered()) < length + 4")
return nil, -1, err
}
pack := make([]byte, int(4+length))
_, err = reader.Read(pack)
if err != nil {
log.Error("when deserializeByReader:", err.Error())
return nil, -1, err
}
var dst protocol.MobileSuiteModel
var msgType int32
msgType, err = self.Deserialize(pack, &dst)
log.Debug(length, msgType, dst)
return &dst, msgType, nil
}
示例3: newMessageReader
func newMessageReader(bufr *bufio.Reader) (*messageReader, error) {
if _, err := bufr.ReadBytes('"'); err != nil {
return nil, err
}
msg, err := bufr.ReadBytes('"')
if err != nil {
return nil, err
}
for {
b, err := bufr.Peek(1)
if err != nil {
return nil, err
}
if b[0] == ',' {
bufr.ReadByte()
break
}
if b[0] != ' ' {
break
}
bufr.ReadByte()
}
return &messageReader{
reader: bufr,
message: string(msg[:len(msg)-1]),
firstRead: true,
}, nil
}
示例4: IsXM
func IsXM(reader *bufio.Reader) bool {
header, e := reader.Peek(17)
if e != nil {
return false
}
return bytes.Equal(header[0:17], xmHeader)
}
示例5: isEof
func isEof(r *bufio.Reader) bool {
_, err := r.Peek(1)
if err == io.EOF {
return true
}
return false
}
示例6: isID3Tag
func isID3Tag(reader *bufio.Reader) bool {
data, err := reader.Peek(3)
if len(data) < 3 || err != nil {
return false
}
return data[0] == 'I' && data[1] == 'D' && data[2] == '3'
}
示例7: read
func (u *udpgwPacket) read(r *bufio.Reader) error {
bs, err := r.Peek(2)
if nil != err {
return err
}
u.length = binary.LittleEndian.Uint16(bs)
//binary.Read(r, binary.BigEndian, &u.length)
r.Discard(2)
//log.Printf("###First %d %d %d %p", u.length, binary.BigEndian.Uint16(bs), len(bs), r)
_, err = r.Peek(int(u.length))
if nil != err {
//log.Printf("### %v", err)
return err
}
bodylen := u.length
binary.Read(r, binary.BigEndian, &u.flags)
binary.Read(r, binary.BigEndian, &u.conid)
bodylen -= 3
if bodylen > 0 {
if (u.flags & flagIPv6) != 0 {
u.addr.ip = make(net.IP, 16)
} else {
u.addr.ip = make(net.IP, 4)
}
r.Read(u.addr.ip)
bodylen -= uint16(len(u.addr.ip))
binary.Read(r, binary.BigEndian, &u.addr.port)
bodylen -= 2
u.content = make([]byte, int(bodylen))
r.Read(u.content)
}
return nil
}
示例8: readAtts
// Reads the attributes, including the '[' and ']' characters and the
// terminating line.
func readAtts(buf *bufio.Reader) (atts map[string]string, err error) {
err = mustRead(buf, '[')
if err != nil {
return
}
atts = make(map[string]string)
for {
var p []byte
p, err = buf.Peek(1)
if err != nil {
return
}
if p[0] == ']' {
err = mustRead(buf, ']')
if err == nil {
err = mustRead(buf, '\n')
}
return
}
var key, value string
key, err = readName(buf)
if err != nil {
return
}
value, err = readName(buf)
if err != nil {
return
}
atts[key] = value
}
panic("Not reached")
}
示例9: Unpack
func Unpack(reader *bufio.Reader) ([]byte, error) {
return reader.ReadBytes('\n')
//if global.PackSplitType =="breakline" {
// return reader.ReadBytes('\n')
//}
lengthByte, _ := reader.Peek(4)
lengthBuff := bytes.NewBuffer(lengthByte)
var length int32
err := binary.Read(lengthBuff, binary.LittleEndian, &length)
if err != nil {
return nil, err
}
fmt.Println("Get length :", length)
if int32(reader.Buffered()) < length+4 {
return nil, err
}
pack := make([]byte, int(4+length))
_, err = reader.Read(pack)
if err != nil {
return nil, err
}
return pack[4:], nil
}
示例10: preprocess
func preprocess(buf []byte, r *bufio.Reader) (int, error) {
i := 0
for c, n, err := r.ReadRune(); err == nil; c, n, err = r.ReadRune() {
if i+n > len(buf) {
// We don't have room so unread the rune and return.
r.UnreadRune()
return i, err
}
switch c {
case '\x00':
if len(buf)-1 < i+len(unknownRune) {
copy(buf[i:len(unknownRune)], unknownRune)
} else {
// We don't have room so unread the rune and
// return.
r.UnreadRune()
return i + n, err
}
case '\r':
buf[i] = '\n'
nxt, err := r.Peek(1)
if err == nil && len(nxt) == 1 && nxt[0] == '\n' {
r.ReadByte()
}
case '\f':
buf[i] = '\n'
default:
copy(buf[i:i+n], []byte(string(c)))
}
i += n
}
return i, nil
}
示例11: decodeIndex
func decodeIndex(rbuf *bufio.Reader, f *File) error {
c, err := rbuf.Peek(len(blockIndex))
if err != nil {
if err == io.EOF {
return nil
}
fmt.Printf("index-peek failed: %v\n", err)
return err
}
if !bytes.Equal(c, blockIndex) {
return nil
}
var ybuf []byte
for {
bline, err := rbuf.ReadBytes('\n')
if err != nil {
return err
}
ybuf = append(ybuf, bline...)
if bytes.HasPrefix(bline, []byte("...")) {
break
}
}
err = yaml.Unmarshal(ybuf, &f.Index)
return err
}
示例12: decodeLine
func decodeLine(r *bufio.Reader) (key, value string, err error) {
var buf bytes.Buffer
for {
// get full line
b, isPrefix, err := r.ReadLine()
if err != nil {
if err == io.EOF {
err = io.ErrUnexpectedEOF
}
return "", "", err
}
if isPrefix {
return "", "", errors.New("unexpected long line")
}
if len(b) == 0 {
return "", "", errors.New("unexpected blank line")
}
if b[0] == ' ' {
b = b[1:]
}
buf.Write(b)
b, err = r.Peek(1)
if err != nil || b[0] != ' ' {
break
}
}
p := strings.SplitN(buf.String(), ":", 2)
if len(p) != 2 {
return "", "", errors.New("bad line, couldn't find key:value")
}
return p[0], p[1], nil
}
示例13: chompFrontmatterEndComment
func chompFrontmatterEndComment(r *bufio.Reader) (err error) {
candidate, err := r.Peek(32)
if err != nil {
return err
}
str := string(candidate)
lineEnd := strings.IndexAny(str, "\n")
if lineEnd == -1 {
return nil
}
testStr := strings.TrimSuffix(str[0:lineEnd], "\r")
if strings.Index(testStr, HTMLCommentStart) != -1 {
return nil
}
//TODO: if we can't find it, Peek more?
if strings.HasSuffix(testStr, HTMLCommentEnd) {
buf := make([]byte, lineEnd)
if _, err = r.Read(buf); err != nil {
return
}
if err = chompWhitespace(r); err != nil {
return err
}
}
return nil
}
示例14: mustPeekBuffered
func mustPeekBuffered(r *bufio.Reader) []byte {
buf, err := r.Peek(r.Buffered())
if len(buf) == 0 || err != nil {
panic(fmt.Sprintf("bufio.Reader.Peek() returned unexpected data (%q, %v)", buf, err))
}
return buf
}
示例15: tryRead
func (h *ResponseHeader) tryRead(r *bufio.Reader, n int) error {
h.Reset()
b, err := r.Peek(n)
if len(b) == 0 {
// treat all errors on the first byte read as EOF
if n == 1 || err == io.EOF {
return io.EOF
}
if err == bufio.ErrBufferFull {
err = bufferFullError(r)
}
return fmt.Errorf("error when reading response headers: %s", err)
}
isEOF := (err != nil)
b = mustPeekBuffered(r)
var headersLen int
if headersLen, err = h.parse(b); err != nil {
if err == errNeedMore {
if !isEOF {
return err
}
// Buggy servers may leave trailing CRLFs after response body.
// Treat this case as EOF.
if isOnlyCRLF(b) {
return io.EOF
}
}
bStart, bEnd := bufferStartEnd(b)
return fmt.Errorf("error when reading response headers: %s. buf=%q...%q", err, bStart, bEnd)
}
mustDiscard(r, headersLen)
return nil
}