首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过net.Pipe使用Golang io.Reader

通过net.Pipe使用Golang io.Reader
EN

Stack Overflow用户
提问于 2016-09-07 01:53:22
回答 1查看 1.2K关注 0票数 1

我试图解决的问题是在网络应用程序中使用io.Reader和io.Writer,而不是像我在网上找到的例子那样使用bufio和字符串。为了提高效率,我尽量避免使用这些内存副本。

我已经在播放区域(https://play.golang.org/p/-7YDs1uEc5)上使用net.Pipe创建了一个测试应用程序。有一个数据源和接收器,它们通过一对net.Pipe连接进行通信(以模拟网络连接),并在远端有一个环回,以将数据直接反映给我们。

程序一直读到loopback代理读取发送的数据,但就我所能看到的写回连接锁而言,它肯定永远不会完成。此外,接收器中的接收器永远不会接收任何数据。

我不明白为什么写不能继续,因为它与工作的路径完全对称。我还编写了其他使用双向网络连接的测试系统,但是当我停止使用bufio和ReadString时,我就遇到了这个问题。我已经看过这些代码了,看不出我遗漏了什么。

提前感谢您的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-07 03:02:22

问题在第68行:

代码语言:javascript
复制
data_received := make([]byte, 0, count)

此行创建一个长度为0、容量为count的切片。对Read的调用不读取数据,因为长度为0。对Write的调用会阻塞,因为永远不会读取数据。

通过将行更改为:

代码语言:javascript
复制
data_received := make([]byte, count)

playground example

请注意,“完成写入”可能不会打印出来,因为程序可以在dataSrc完成执行之前退出。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39355092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档