javascript ArrayBuffer, what's it for?

Javascript

Javascript Problem Overview


Maybe it's late, or maybe it's the sake, but I just read the docs for ArrayBuffer and can't think of a single thing it would be really useful for.

Can someone enlighten me?

Are there any uses anyone can think of that don't involve images?

Javascript Solutions


Solution 1 - Javascript

Basically ArrayBuffer is used to keep binary data. It can be the binary data of an image for example.

In other languages buffers are proved very useful. Yes, of-course it is little difficult to understand/use than other data types.

ArrayBuffer can be used to get data of jpg image (RGB bytes) and produce a png out of it by adding alpha byte (i.e. RGBA).

Mozilla site has given a small use of ArrayBuffer here

> ## Working with complex data structures > > By combining a single buffer with multiple views of different types, > starting at different offsets into the buffer, you can interact with > data objects containing multiple data types. This lets you, for > example, interact with complex data structures from WebGL, data files, > or C structures you need to use while using js-ctypes. > > Consider this C structure: > > struct someStruct {
> unsigned long id;
> char username[16];
> float amountDue;
> };
> > You can access a buffer containing data in this format like this: > > var buffer = new ArrayBuffer(24);
>
> // ... read the data into the buffer ...
>
> var idView = new Uint32Array(buffer, 0, 1);
> var usernameView = new Uint8Array(buffer, 4, 16);
> var amountDueView = new Float32Array(buffer, 20, 1);
> > Then you can access, for example, the amount due with > amountDueView[0]. > > > Note: The data structure alignment in a C structure is > > platform-dependent. Take precautions and considerations for these > > padding differences.

Solution 2 - Javascript

An ArrayBuffer is a chunk of binary data in RAM. There are a few ways to "open" an ArrayBuffer for reading and writing:

  • Typed arrays, such as Uint16Array, can read and write the buffer by treating it as an array of integers. They don't let you control endianness; it uses the CPU's preferred endianness. Uint8Array is useful for controlling individual bytes (copying, slicing, etc).

  • DataView is not as simple, but it gives you more control. It lets you choose the endianness, integer size, and byte index (e.g. you can access a 32 bit integer at an index that's not divisible by 32 bits). These things can be specified each time you read and write an integer with the same DataView.

More info: https://javascript.info/arraybuffer-binary-arrays

Solution 3 - Javascript

Other than images, it's useful for precisely constructing and destructing low level network data packets used in protocols like UDP.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionmkoryakView Question on Stackoverflow
Solution 1 - JavascriptImdadView Answer on Stackoverflow
Solution 2 - JavascriptDull BananasView Answer on Stackoverflow
Solution 3 - JavascriptJonathanView Answer on Stackoverflow