将Node.js的Buffer转换为浏览器的JavaScript

34

我正在将我的代码从Node.js转换到浏览器的JavaScript,但是在Node.js中遇到了Buffer的问题。我该如何在JavaScript中使用它们?

这里有一个例子:

new Buffer("foo", encoding='utf8')
<Buffer 66 6f 6f>

我需要在JavaScript中将[66, 6f, 6f]转换为"foo",反之亦然。我该如何做到这一点? 注意:这必须在没有Node.js的情况下完成。

4个回答

14

2
这些天它在这里:https://github.com/feross/buffer。 - Arto Bendiken
现在(2022年),https://github.com/StableLib/stablelib/tree/master/packages 也可能提供解决方案,特别是utf-8和hex模块。 - comte

11

在基于浏览器的JavaScript中没有直接支持Buffer的功能,我也不知道是否有任何兼容库实现了Buffer API(至少目前还没有)。

在浏览器中提供相应的功能是通过使用TypedArrays实现的。您可以在这里了解它们:

当将基于Node.js的Buffer实现迁移到基于浏览器的JavaScript时,我发现以下答案很有用:


1
现在有一个浏览器Buffer兼容库 - josh3736

8

我发现用于web3的一个库包含了Buffer函数,你可以将其作为CDN引入:

<script src="https://cdn.jsdelivr.net/gh/ethereumjs/browser-builds/dist/ethereumjs-tx/ethereumjs-tx-1.3.3.min.js"></script>

然后您可以像这样使用该函数:

ethereumjs.Buffer.Buffer.from(valueToConvert,'hex');

-9

不,不是的,我需要一个Buffer()的替代方案。无论如何还是谢谢你 :) 我需要在浏览器的JavaScript中运行它。 - Fermuch
1
请注意,如果 Buffer 以不完整的 UTF-8 序列结尾,则仅使用 toString() 是不够的,你会得到一个损坏的最后一个字符。(如果您正在使用缓冲区读取未知文本内容的流,则可能会发生这种情况。)在这种情况下,解决方案是改为使用 [StringDecoder](http://nodejs.org/api/string_decoder.html)。 - hippietrail
加一,这对我在Node中很有用的信息。 - User 1058612

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接