将流写入缓冲区对象

Posted

技术标签:

【中文标题】将流写入缓冲区对象【英文标题】:Write stream into buffer object 【发布时间】:2018-01-04 17:21:10 【问题描述】:

我有一个正在从音频源读取的流,我正在尝试将其存储到 Buffer 中。从我读过的documentation 中,您可以使用fs.createWriteStream(~buffer~) 而不是文件路径将pipe 流合并为一个。

我目前正在这样做:

const outputBuffer = Buffer.alloc(150000)
const stream = fs.createWriteStream(outputBuffer)

但是当我运行它时,它会抛出一个错误,指出文件系统调用的Path: must be a string without null bytes

如果我对文档有误解或遗漏了一些明显的内容,请告诉我!

【问题讨论】:

【参考方案1】:

fs.createWriteStream() 的第一个参数是要读取的文件名。这就是您收到该特定错误的原因。

无法从流中直接读取到现有的Buffer。有 a node EP 支持这一点,但它或多或少地消失了,因为它存在一些潜在的陷阱。

现在您需要手动复制字节,或者如果您不希望节点分配额外的缓冲区,则需要手动调用fs.open()fs.read()(这是允许您通过的方法在您的Buffer 实例中,以及偏移量)和fs.close()

【讨论】:

以上是关于将流写入缓冲区对象的主要内容,如果未能解决你的问题,请参考以下文章

设置标准流使用的内部缓冲区 (pubsetbuf)

javaNIO编程

Java NIO应用实例

将流数据上传到 Amazon S3

Java NIO 缓冲区学习笔记

OpenGL如何在模板测试失败且深度测试成功时写入模板缓冲区?