@@ -40,8 +40,45 @@ func NewReaderSize(rd io.ReadSeeker, size int) *Reader {
40
40
// relative to the end. Seek returns the new offset relative to the start
41
41
// of the file and an error, if any.
42
42
//
43
- func (p * Reader ) Seek (offset int64 , whence int ) (int64 , error ) {
44
- return Seek (& p .Reader , offset , whence )
43
+ func (r * Reader ) Seek (offset int64 , whence int ) (int64 , error ) {
44
+ return Seek (& r .Reader , offset , whence )
45
+ }
46
+
47
+ // ReadAtLeast reads from r into buf until it has read at least min bytes.
48
+ // It returns the number of bytes copied and an error if fewer bytes were read.
49
+ // The error is EOF only if no bytes were read.
50
+ // If an EOF happens after reading fewer than min bytes,
51
+ // ReadAtLeast returns ErrUnexpectedEOF.
52
+ // If min is greater than the length of buf, ReadAtLeast returns ErrShortBuffer.
53
+ // On return, n >= min if and only if err == nil.
54
+ // If r returns an error having read at least min bytes, the error is dropped.
55
+ func (r * Reader ) ReadAtLeast (buf []byte , min int ) (n int , err error ) {
56
+ return ReadAtLeast (& r .Reader , buf , min )
57
+ }
58
+
59
+ // ReadFull reads exactly len(buf) bytes from r into buf.
60
+ // It returns the number of bytes copied and an error if fewer bytes were read.
61
+ // The error is EOF only if no bytes were read.
62
+ // If an EOF happens after reading some but not all the bytes,
63
+ // ReadFull returns ErrUnexpectedEOF.
64
+ // On return, n == len(buf) if and only if err == nil.
65
+ // If r returns an error having read at least len(buf) bytes, the error is dropped.
66
+ func (r * Reader ) ReadFull (buf []byte ) (n int , err error ) {
67
+ return ReadAtLeast (& r .Reader , buf , len (buf ))
68
+ }
69
+
70
+ // -----------------------------------------------------------------------------
71
+
72
+ // UnderlyingReader returns the underlying reader.
73
+ func UnderlyingReader (b interface {}) io.Reader {
74
+ switch v := b .(type ) {
75
+ case * Reader :
76
+ return getUnderlyingReader (& v .Reader )
77
+ case * bufio.Reader :
78
+ return getUnderlyingReader (v )
79
+ default :
80
+ panic ("can only to get the underlying reader of *bufiox.Reader or *bufio.Reader" )
81
+ }
45
82
}
46
83
47
84
// -----------------------------------------------------------------------------
0 commit comments