func (c *IPConn) Read(b []byte) (int, error)
如果我要读取的字节流是未知长度,该怎么办?这里面这个b是不是只能在var声明变量的时候写死长度?
net包它有木有像别的编程语言里面的socket一样以类似于chunk的方式读取?(也就是说从socket缓冲区中每次读小部分数据,直到缓冲区没有数据为止,而不是一次性读整个数据,不然怕大文件会造成卡死)
func (c *IPConn) Read(b []byte) (int, error)
如果我要读取的字节流是未知长度,该怎么办?这里面这个b是不是只能在var声明变量的时候写死长度?
net包它有木有像别的编程语言里面的socket一样以类似于chunk的方式读取?(也就是说从socket缓冲区中每次读小部分数据,直到缓冲区没有数据为止,而不是一次性读整个数据,不然怕大文件会造成卡死)
7 回答5.3k 阅读
6 回答6.8k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答3.4k 阅读
2 回答883 阅读✓ 已解决
2 回答2.2k 阅读
1 回答2.1k 阅读
这种需求一般要先定义好包结构,不然就会有沾包问题出现了。基本数据类型(int|bool|byte)可以按照次序pack,对断按照次序读取就好,如果非基本类型,比如string或者binary,可以使用size+data的形式。read时,先读取size,获取之后的data数据长度,再去读取就好了。大体如下:
或者很多开发者采用的特殊字符分割的方式,每次读取一个字符,遇到特定字符认为是包截止。