项目作者: feross

项目描述 :
Convert a typed array to a Buffer without a copy.
高级语言: JavaScript
项目地址: git://github.com/feross/typedarray-to-buffer.git
创建时间: 2014-04-08T07:47:51Z
项目社区:https://github.com/feross/typedarray-to-buffer

开源协议:MIT License

下载


typedarray-to-buffer travis npm downloads javascript style guide

Convert a typed array to a Buffer without a copy.

saucelabs

Say you’re using the ‘buffer’ module on npm, or
browserify and you’re working with lots of binary data.

Unfortunately, sometimes the browser or someone else’s API gives you a typed array like
Uint8Array to work with and you need to convert it to a Buffer. What do you do?

Of course: Buffer.from(uint8array)

But, alas, every time you do Buffer.from(uint8array) the entire array gets copied.
The Buffer constructor does a copy; this is
defined by the node docs and the ‘buffer’ module
matches the node API exactly.

So, how can we avoid this expensive copy in
performance critical applications?

Simply use this module, of course!

If you have an ArrayBuffer, you don’t need this module, because
Buffer.from(arrayBuffer)
is already efficient.

install

  1. npm install typedarray-to-buffer

usage

To convert a typed array to a Buffer without a copy, do this:

  1. var toBuffer = require('typedarray-to-buffer')
  2. var arr = new Uint8Array([1, 2, 3])
  3. arr = toBuffer(arr)
  4. // arr is a buffer now!
  5. arr.toString() // '\u0001\u0002\u0003'
  6. arr.readUInt16BE(0) // 258

how it works

If the browser supports typed arrays, then toBuffer will augment the typed array you
pass in with the Buffer methods and return it. See how does Buffer
work?
for more about how augmentation
works.

This module uses the typed array’s underlying ArrayBuffer to back the new Buffer. This
respects the “view” on the ArrayBuffer, i.e. byteOffset and byteLength. In other
words, if you do toBuffer(new Uint32Array([1, 2, 3])), then the new Buffer will
contain [1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0], not [1, 2, 3]. And it still doesn’t
require a copy.

If the browser doesn’t support typed arrays, then toBuffer will create a new Buffer
object, copy the data into it, and return it. There’s no simple performance optimization
we can do for old browsers. Oh well.

If this module is used in node, then it will just call Buffer.from. This is just for
the convenience of modules that work in both node and the browser.

license

MIT. Copyright (C) Feross Aboukhadijeh.