What is bytebuffer?
The bytebuffer npm package is a utility for working with binary data in JavaScript. It provides a comprehensive API for reading and writing various data types to and from byte buffers, making it useful for tasks such as serialization, deserialization, and network communication.
What are bytebuffer's main functionalities?
Creating a ByteBuffer
This feature allows you to create a new ByteBuffer instance. ByteBuffers are used to manage binary data efficiently.
const ByteBuffer = require('bytebuffer');
const bb = new ByteBuffer();
Writing Data to a ByteBuffer
This feature allows you to write various data types to a ByteBuffer. In this example, an integer and a float are written to the buffer.
const ByteBuffer = require('bytebuffer');
const bb = new ByteBuffer();
bb.writeInt32(123456);
bb.writeFloat32(3.14);
Reading Data from a ByteBuffer
This feature allows you to read various data types from a ByteBuffer. In this example, an integer and a float are read from the buffer after writing.
const ByteBuffer = require('bytebuffer');
const bb = new ByteBuffer();
bb.writeInt32(123456);
bb.writeFloat32(3.14);
bb.flip();
const intVal = bb.readInt32();
const floatVal = bb.readFloat32();
Handling Endianness
This feature allows you to specify the endianness (byte order) of the ByteBuffer. In this example, the buffer is set to little-endian mode.
const ByteBuffer = require('bytebuffer');
const bb = new ByteBuffer(ByteBuffer.LITTLE_ENDIAN);
bb.writeInt32(123456);
bb.flip();
const intVal = bb.readInt32();
Converting ByteBuffer to ArrayBuffer
This feature allows you to convert a ByteBuffer to an ArrayBuffer, which can be useful for interoperability with other APIs that use ArrayBuffers.
const ByteBuffer = require('bytebuffer');
const bb = new ByteBuffer();
bb.writeInt32(123456);
const arrayBuffer = bb.toArrayBuffer();
Other packages similar to bytebuffer
buffer
The buffer package is a Node.js core module that provides a way of handling binary data. It is similar to bytebuffer in that it allows for reading and writing various data types, but it is more integrated into the Node.js ecosystem and is generally more performant.
protobufjs
The protobufjs package is a library for working with Protocol Buffers, a binary serialization format. While it offers more advanced serialization capabilities compared to bytebuffer, it is more complex and specifically designed for Protocol Buffers.
dataview
The dataview package provides a DataView implementation for Node.js, allowing for low-level manipulation of ArrayBuffers. It is similar to bytebuffer in terms of functionality but is more low-level and requires more manual management of buffers.
A fast and complete ByteBuffer implementation using either ArrayBuffers in the browser or node Buffers under node.js,
generated from a single source tree through MetaScript.
If you are looking for ByteBuffer.js 2 (ArrayBuffers only), that's the branch.
What can it do?
- 8, 16, 32 and 64 bit signed and unsigned integers
- 32 and 64 bit floats
- Big and little endianness
- Varints as used in protobuf (32 and 64 bit, zig-zag)
- Base64, binary, debug, hex and utf8 encodings
- Handy string and debugging utilities
- Relative and absolute zero-copy operations wherever possible
- Transparent resizing when using unknown-length data
- Chaining of all operations that do not return a specific value
- Slicing, appending, prepending, reversing, flip, mark, reset, etc.
More
- CommonJS, AMD and shim compatible
- Also available via npm
- Compiled through Closure Compiler using ADVANCED_OPTIMIZATIONS
(fully annotated, includes externs and source map)
- Fully documented using jsdoc3
- Well tested through test.js
- Zero production dependencies (Long.js is optional)
Usage
Node.js
- Install:
npm install bytebuffer
var ByteBuffer = require("bytebuffer");
var bb = new ByteBuffer();
bb.writeIString("Hello world!").flip();
console.log(bb.readIString()+" from ByteBuffer.js");
Browser
Optionally depends on Long.js for long (int64) support. If you do not require long
support, you can skip the Long.js include.
<script src="Long.min.js"></script>
<script src="ByteBufferAB.min.js"></script>
var ByteBuffer = dcodeIO.ByteBuffer;
var bb = new ByteBuffer();
bb.writeIString("Hello world!").flip();
alert(bb.readIString()+" from ByteBuffer.js");
AMD
Optionally depends on Long.js for long (int64) support. If you do not require long
support, you can skip the Long.js config. Require.js example:
require.config({
"paths": {
"Long": "/path/to/Long.js"
"ByteBuffer": "/path/to/ByteBufferAB.js"
}
});
require(["ByteBuffer"], function(ByteBuffer) {
var bb = new ByteBuffer();
bb.writeIString("Hello world!").flip();
alert(bb.readIString()+" from ByteBuffer.js");
});
Downloads
Documentation
Tests (& Examples)
Support for IE<10, FF<15, Chrome<9 etc.
- Requires working ArrayBuffer & DataView implementations (i.e. use a polyfill)
Contributors
Dretch (IE8 compatibility)
License
Apache License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.html