我正在将我的代码从Node.js转换到浏览器的JavaScript,但是在Node.js中遇到了Buffer的问题。我该如何在JavaScript中使用它们?
这里有一个例子:
new Buffer("foo", encoding='utf8')
<Buffer 66 6f 6f>
我需要在JavaScript中将[66, 6f, 6f]转换为"foo",反之亦然。我该如何做到这一点? 注意:这必须在没有Node.js的情况下完成。
我正在将我的代码从Node.js转换到浏览器的JavaScript,但是在Node.js中遇到了Buffer的问题。我该如何在JavaScript中使用它们?
这里有一个例子:
new Buffer("foo", encoding='utf8')
<Buffer 66 6f 6f>
我需要在JavaScript中将[66, 6f, 6f]转换为"foo",反之亦然。我该如何做到这一点? 注意:这必须在没有Node.js的情况下完成。
使用https://github.com/substack/node-browserify,您可以通过使用https://github.com/toots/buffer-browserify在浏览器中处理缓冲区。然而,在浏览器中这样做可能非常慢:为了更快的访问,请使用https://github.com/chrisdickinson/bops.
在基于浏览器的JavaScript中没有直接支持Buffer的功能,我也不知道是否有任何兼容库实现了Buffer API(至少目前还没有)。
在浏览器中提供相应的功能是通过使用TypedArrays实现的。您可以在这里了解它们:
当将基于Node.js的Buffer实现迁移到基于浏览器的JavaScript时,我发现以下答案很有用:
我发现用于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');
要将其转换回字符串,请使用缓冲区的toString方法并提供编码。
http://nodejs.org/docs/latest/api/buffers.html#buffer.toString
var buffer = new Buffer("foo", "utf8");
var str = buffer.toString("utf8");
str === "foo";
Buffer
以不完整的 UTF-8 序列结尾,则仅使用 toString()
是不够的,你会得到一个损坏的最后一个字符。(如果您正在使用缓冲区读取未知文本内容的流,则可能会发生这种情况。)在这种情况下,解决方案是改为使用 [StringDecoder
](http://nodejs.org/api/string_decoder.html)。 - hippietrail