本文整理汇总了Golang中bufio.Reader.Buffered方法的典型用法代码示例。如果您正苦于以下问题:Golang Reader.Buffered方法的具体用法?Golang Reader.Buffered怎么用?Golang Reader.Buffered使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类bufio.Reader
的用法示例。
在下文中一共展示了Reader.Buffered方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: 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
}
示例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: handshake
func handshake(client net.Conn, config *Config) (bouncer *BouncerConfig, remainder []byte) {
// Setup a buffered reader over the client.
var reader *bufio.Reader = bufio.NewReader(client)
// Attempt to handshake with the client and determine the requested config.
var match chan *BouncerConfig = make(chan *BouncerConfig, 1)
go seekshake(reader, config, match)
// Block until handshake is done or we hit our timeout.
select {
case bouncer = <-match:
// Grab the remaining portion of the handshake.
remainder = make([]byte, reader.Buffered())
reader.Read(remainder)
if bouncer != nil {
log.Printf("LOGIN %s", client.RemoteAddr())
} else {
log.Printf("REJECT %s", client.RemoteAddr())
}
return bouncer, remainder
case <-time.After(time.Duration(config.Auth.Timeout) * time.Second):
log.Printf("TIMEOUT %s", client.RemoteAddr())
return nil, []byte{}
}
}
示例4: deserializeByReader
func deserializeByReader(reader *bufio.Reader) (*pb.MobileSuiteProtobuf, error) {
buff, _ := reader.Peek(4)
data := bytes.NewBuffer(buff)
var length int32
err := binary.Read(data, binary.BigEndian, &length)
if err != nil {
return nil, err
}
fmt.Println(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
}
msg := pack[4:]
var dst pb.MobileSuiteProtobuf
proto.Unmarshal(msg, &dst)
fmt.Println(&dst)
var testMsg pb.TestMessage
proto.Unmarshal(dst.Message, &testMsg)
fmt.Println(&testMsg)
return &dst, nil
}
示例5: 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
}
示例6: HijackRequest
func HijackRequest(req *http.Request, dial func(string, string) (net.Conn, error)) (*http.Response, ReadWriteCloser, error) {
if dial == nil {
dial = net.Dial
}
conn, err := dial("tcp", req.URL.Host)
if err != nil {
return nil, nil, err
}
clientconn := httputil.NewClientConn(conn, nil)
res, err := clientconn.Do(req)
if err != nil && err != httputil.ErrPersistEOF {
return nil, nil, err
}
if res.StatusCode != http.StatusSwitchingProtocols {
return res, nil, &url.Error{
Op: req.Method,
URL: req.URL.String(),
Err: fmt.Errorf("controller: unexpected status %d", res.StatusCode),
}
}
var rwc io.ReadWriteCloser
var buf *bufio.Reader
rwc, buf = clientconn.Hijack()
if buf.Buffered() > 0 {
rwc = struct {
io.Reader
writeCloser
}{
io.MultiReader(io.LimitReader(buf, int64(buf.Buffered())), rwc),
rwc.(writeCloser),
}
}
return res, rwc.(ReadWriteCloser), nil
}
示例7: fullRuneBuffered
func fullRuneBuffered(br *bufio.Reader) bool {
n := br.Buffered()
buf, err := br.Peek(n)
if err != nil {
return false
}
return utf8.FullRune(buf)
}
示例8: bufferFullError
func bufferFullError(r *bufio.Reader) error {
n := r.Buffered()
b, err := r.Peek(n)
if err != nil {
panic(fmt.Sprintf("BUG: unexpected error returned from bufio.Reader.Peek(Buffered()): %s", err))
}
bStart, bEnd := bufferStartEnd(b)
return fmt.Errorf("headers exceed %d bytes. Increase ReadBufferSize. buf=%q...%q", n, bStart, bEnd)
}
示例9: readContinuedLineSlice
// Learned from net.textproto. One difference is that this one keeps the
// ending '\n' in the returned line. Buf if there's only CRLF in the line,
// return nil for the line.
func readContinuedLineSlice(r *bufio.Reader) ([]byte, error) {
// feedly.com request headers contains things like:
// "$Authorization.feedly: $FeedlyAuth\r\n", so we must test for only
// continuation spaces.
isspace := func(b byte) bool {
return b == ' ' || b == '\t'
}
// Read the first line.
line, err := r.ReadSlice('\n')
if err != nil && err != io.EOF {
return nil, err
}
// There are servers that use \n for line ending, so trim first before check ending.
// For example, the 404 page for http://plan9.bell-labs.com/magic/man2html/1/2l
trimmed := TrimSpace(line)
if len(trimmed) == 0 {
if len(line) > 2 {
return nil, fmt.Errorf("malformed end of headers, len: %d, %#v", len(line), string(line))
}
return nil, nil
}
if isspace(line[0]) {
return nil, fmt.Errorf("malformed header, start with space: %#v", string(line))
}
// Optimistically assume that we have started to buffer the next line
// and it starts with an ASCII letter (the next header key), so we can
// avoid copying that buffered data around in memory and skipping over
// non-existent whitespace.
if r.Buffered() > 0 {
peek, err := r.Peek(1)
if err == nil && !isspace(peek[0]) {
return line, nil
}
}
var buf []byte
buf = append(buf, trimmed...)
// Read continuation lines.
for skipSpace(r) > 0 {
line, err := r.ReadSlice('\n')
if err != nil {
break
}
buf = append(buf, ' ')
buf = append(buf, TrimTrailingSpace(line)...)
}
buf = append(buf, '\r', '\n')
return buf, nil
}
示例10: peekRequestLine
// convert from net/textproto/reader.go:Reader.upcomingHeaderNewlines
func peekRequestLine(r *bufio.Reader) ([]byte, error) {
r.Peek(1) // force a buffer load if empty
s := r.Buffered()
if s == 0 {
return nil, errors.New("No request in connection")
}
peek, _ := r.Peek(s)
line, err := bytes.NewBuffer(peek).ReadBytes('\n')
if err != nil {
return nil, errors.New("Bad request in connection")
}
return line, nil
}
示例11: Hijack
func (c *Client) Hijack(method, path string, header http.Header, in interface{}) (ReadWriteCloser, error) {
uri, err := url.Parse(c.URL)
if err != nil {
return nil, err
}
dial := c.HijackDial
if dial == nil {
dial = net.Dial
}
conn, err := dial("tcp", uri.Host)
if err != nil {
return nil, err
}
clientconn := httputil.NewClientConn(conn, nil)
req, err := c.prepareReq(method, path, header, in)
if err != nil {
return nil, err
}
req.Header.Set("Connection", "upgrade")
res, err := clientconn.Do(req)
if err != nil && err != httputil.ErrPersistEOF {
return nil, err
}
if res.StatusCode != http.StatusSwitchingProtocols {
defer res.Body.Close()
if strings.Contains(res.Header.Get("Content-Type"), "application/json") {
var jsonErr httphelper.JSONError
if err := json.NewDecoder(res.Body).Decode(&jsonErr); err == nil {
return nil, jsonErr
}
}
return nil, &url.Error{
Op: req.Method,
URL: req.URL.String(),
Err: fmt.Errorf("httpclient: unexpected status %d", res.StatusCode),
}
}
var rwc io.ReadWriteCloser
var buf *bufio.Reader
rwc, buf = clientconn.Hijack()
if buf.Buffered() > 0 {
rwc = struct {
io.Reader
writeCloser
}{
io.MultiReader(io.LimitReader(buf, int64(buf.Buffered())), rwc),
rwc.(writeCloser),
}
}
return rwc.(ReadWriteCloser), nil
}
示例12: bufFlush
// Flush any data buffered in a bufio.Reader to a designated io.Writer.
// Used for transitioning from SOCKS negotiation to data-forwarding mode.
func bufFlush(br *bufio.Reader, w io.Writer) error {
n := br.Buffered()
if n == 0 {
return nil // nothing buffered to flush
}
buf := make([]byte, n)
if _, err := io.ReadFull(br, buf); err != nil {
return err
}
_, err := w.Write(buf)
return err
}
示例13: Read
// Read reads response header from r.
func (h *ResponseHeader) Read(r *bufio.Reader) error {
n := 1
for {
err := h.tryRead(r, n)
if err == nil {
return nil
}
if err != errNeedMore {
h.Reset()
return err
}
n = r.Buffered() + 1
}
}
示例14: Read
// Read reads request header from r.
//
// io.EOF is returned if r is closed before reading the first header byte.
func (h *RequestHeader) Read(r *bufio.Reader) error {
n := 1
for {
err := h.tryRead(r, n)
if err == nil {
return nil
}
if err != errNeedMore {
h.resetSkipNormalize()
return err
}
n = r.Buffered() + 1
}
}
示例15: doLineRead
func doLineRead(r *bufio.Reader) {
line, prefix, err := r.ReadLine()
if err != nil {
log.Fatalf("failed reading a line: %s", err)
}
log.Printf("Got the rest of the line: %s", line)
if prefix {
log.Printf("Line too big for buffer, only first %d bytes returned", len(line))
} else {
log.Printf("Line fit in buffer, full line returned")
}
log.Printf("After all that, %d bytes are buffered", r.Buffered())
}