read implements the io.Reader interface. This method is used by BufferReader to consume its underlying buffer. To perform io operations on buffers directly, use ReadToWriter or WriteToReader.
(p []byte)
| 554 | // to consume its underlying buffer. To perform io operations on buffers |
| 555 | // directly, use ReadToWriter or WriteToReader. |
| 556 | func (b *Buffer) read(p []byte) (int, error) { |
| 557 | if len(p) == 0 { |
| 558 | return 0, nil |
| 559 | } |
| 560 | if b.Size() == 0 { |
| 561 | return 0, io.EOF |
| 562 | } |
| 563 | done := 0 |
| 564 | v := b.data.Front() |
| 565 | for v != nil && done < len(p) { |
| 566 | n, err := v.Read(p[done:]) |
| 567 | done += n |
| 568 | next := v.Next() |
| 569 | if v.Size() == 0 { |
| 570 | b.removeView(v) |
| 571 | } |
| 572 | b.size -= int64(n) |
| 573 | if err != nil && err != io.EOF { |
| 574 | return done, err |
| 575 | } |
| 576 | v = next |
| 577 | } |
| 578 | return done, nil |
| 579 | } |
| 580 | |
| 581 | // readByte implements the io.ByteReader interface. This method is used by |
| 582 | // BufferReader to consume its underlying buffer. To perform io operations on |