【问题标题】:Deno equivalent to 'peek' for Reader/Conn?Deno 相当于 Reader/Conn 的“窥视”?
【发布时间】:2021-06-18 22:53:23
【问题描述】:

在调用.read(...) 之前,是否有一种干净/惯用的方法来检查是否有任何数据可供读取(例如,在对应于 TCP 连接的Conn 中)?如果有 1 个或更多字节可用,则可以安全地假设 read 返回的承诺不会永远处于挂起状态。

对于上下文,我刚刚开始学习 Deno,并且正在制作一个简单的 telnet 类脚本。我最初试图在同一个异步函数中处理来自标准输入的输入(通过连接写出)和接收的数据(显示)。在这种情况下,我必须小心不要await conn.read(...),因为这可能永远无法解决(其他主机可能不会再发送任何东西)。我知道我可以将它们分开,或者使用Promise.race 来等待来自任何一个的输入。但是,我仍然想知道是否有类似 peek 的函数/方法/实用程序来提供此功能。

【问题讨论】:

    标签: deno


    【解决方案1】:

    BufReader 有一个peek 方法(src):

    peek() 返回 下一个 n 字节,无需推进阅读器。字节不再有效 在下一次读取调用时。

    当到达底层流的末尾,但有未读 缓冲区中剩余的字节,则返回这些字节。如果没有 缓冲区中剩余的字节,它返回null

    如果在n 字节可用之前遇到错误,peek() 抛出 partial 属性设置为缓冲区切片的错误 包含发生错误之前可用的字节数。

    【讨论】:

    • 谢谢,这正是我想要的。我想我应该更加努力地找到它,但目前搜索标准库 API 文档并不容易。既然你提到了它,我就能找到通往doc.deno.land/https/deno.land/std/io/mod.ts#BufReader的路
    • 我忘记了渲染的文档;很好,我看不到链接到类上的单个方法的方法,但我已经更新了引用和参考文档的答案;谢谢!
    猜你喜欢
    • 2015-05-30
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 2013-07-16
    相关资源
    最近更新 更多