栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

无需阅读就可以窥视Conn

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

无需阅读就可以窥视Conn

您已经很接近解决方案了-
唯一出错的地方

Conn
就是首先阅读本身。你是正确的
bufio.Reader
Peek
方法是要走的路。诀窍是首先使缓冲的读取器生效,然后调用
Peek
缓冲的读取器,而不是从原始读取器进行读取
Conn
。这是一种
bufferedConn
可以满足您需要的类型:

type bufferedConn struct {    r        *bufio.Reader    net.Conn // So that most methods are embedded}func newBufferedConn(c net.Conn) bufferedConn {    return bufferedConn{bufio.NewReader(c), c}}func newBufferedConnSize(c net.Conn, n int) bufferedConn {    return bufferedConn{bufio.NewReaderSize(c, n), c}}func (b bufferedConn) Peek(n int) ([]byte, error) {    return b.r.Peek(n)}func (b bufferedConn) Read(p []byte) (int, error) {    return b.r.Read(p)}

这样做是允许你访问所有的正常

net.Conn
方法(通过嵌入
net.Conn
-你也可以写的包装功能,但是这是一个极大的方便,更清洁),并另外提供访问
bufferedReader
Peek
Read
方法(这一点很重要
Read
BE在上调用
bufferedReader
,而不是直接在上调用,
net.Conn
因为
Peek
将数据存储在缓冲区中,因此后续调用
Read
需要能够首先从该缓冲区中读取任何数据,然后再返回基础
net.Conn
)。

newBufferedConnSize
鉴于当前的默认缓冲区大小为4096字节,该函数可能是不必要的,但是从技术上讲,如果您要依赖能够以
Peek
给定大小进行调用并且不让它返回错误(特别是
ErrBufferFull
),则应显式设置它的大小至少要与您打算窥视的字节数一样大。

在Go Playground上检查一下。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/413129.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号