type LimitedReader struct {
R Reader // underlying reader
N int64 // max bytes remaining
}
LimitedReader从R读取,但将返回的数据量限制为N个字节。每次读取更新N以标记剩余可以读取的字节数。Read在N<=0时或基础R返回EOF时返回EOF。
记忆点:从瓶子最多倒N字节数据出来。
具体实现方法为:func LimitReader(r Reader, n int64) Reader
func (l *LimitedReader) Read(p []byte) (n int, err error) {
if l.N <= 0 {
return 0, EOF
}
if int64(len(p)) > l.N {
p = p[0:l.N]
}
n, err = l.R.Read(p)
l.N -= int64(n)
return
}
【分析】
如果切片比N大,就一次倒进去。
如果切片比N小,就多倒几次,l.N为剩下要倒的字节个数。
srd := strings.NewReader("hello golang")
lrd := io.LimitReader(srd, 10)
s := make([]byte, 6)
n, err := lrd.Read(s)
//读了6字节到切片s
log.Println(n, err)
//断言取出Reader
if p,is:=lrd.(*io.LimitedReader);is{
log.Println(p.N)
}
打印结果:
2023/02/28 14:54:40 6
2023/02/28 14:54:40 4
【分析】io.LimitReader()返回的是一个接口值,需要断言才能取到值。
倒入切片6字节,因此N=10-6=4字节。
LimitReader是一个带限制大小N的Reader包装
页面更新:2024-04-17
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号