Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Essential Node.js and browser byte array manipulation tools

License

NotificationsYou must be signed in to change notification settings

jsonjoy-com/buffers

Repository files navigation

Various helper utilities for working with buffers and binary data in TypeScript.

Installation

npm install @jsonjoy.com/buffers

Features

This package provides high-performance utilities for working with binary data, buffers, and UTF-8 text encoding/decoding. It includes optimized implementations for both Node.js and browser environments.

Core Classes

Writer

A growable binary data writer with automatic buffer expansion.

import{Writer}from'@jsonjoy.com/buffers/lib/Writer';constwriter=newWriter();writer.u8(0x42);// Write unsigned 8-bit integerwriter.u16(0x1234);// Write unsigned 16-bit integerwriter.u32(0x12345678);// Write unsigned 32-bit integerwriter.u64(0x123456789abcdefn);// Write unsigned 64-bit integerwriter.f32(3.14);// Write 32-bit floatwriter.f64(3.141592653589793);// Write 64-bit floatwriter.utf8('Hello 🌍');// Write UTF-8 stringwriter.ascii('Hello');// Write ASCII stringconstdata=writer.flush();// Get written data as Uint8Array

Reader

A binary data reader for parsing binary buffers.

import{Reader}from'@jsonjoy.com/buffers/lib/Reader';constreader=newReader();reader.reset(someUint8Array);constbyte=reader.u8();// Read unsigned 8-bit integerconstword=reader.u16();// Read unsigned 16-bit integerconstdword=reader.u32();// Read unsigned 32-bit integerconstqword=reader.u64();// Read unsigned 64-bit integerconstfloat=reader.f32();// Read 32-bit floatconstdouble=reader.f64();// Read 64-bit floatconsttext=reader.utf8(5);// Read UTF-8 string of 5 bytesconstascii=reader.ascii(5);// Read ASCII string of 5 characters

StreamingReader

A streaming binary reader that can handle data arriving in chunks.

import{StreamingReader}from'@jsonjoy.com/buffers/lib/StreamingReader';constreader=newStreamingReader();reader.push(chunk1);reader.push(chunk2);// Read data as it becomes availableconstvalue=reader.u32();reader.consume();// Mark consumed data for cleanup

StreamingOctetReader

A specialized streaming reader for byte-oriented protocols with optional XOR masking.

import{StreamingOctetReader}from'@jsonjoy.com/buffers/lib/StreamingOctetReader';constreader=newStreamingOctetReader();reader.push(dataChunk);constbyte=reader.u8();constmasked=reader.bufXor(length,[0x12,0x34,0x56,0x78],0);

Utility Functions

Buffer Operations

// Array creation and manipulationimport{b}from'@jsonjoy.com/buffers/lib/b';import{concat,concatList}from'@jsonjoy.com/buffers/lib/concat';import{copy}from'@jsonjoy.com/buffers/lib/copy';constbuffer=b(0x48,0x65,0x6c,0x6c,0x6f);// Create from bytesconstcombined=concat(buffer1,buffer2);// Concatenate two buffersconstlist=concatList([buf1,buf2,buf3]);// Concatenate array of buffersconstduplicate=copy(originalBuffer);// Copy buffer

Comparison Functions

import{cmpUint8Array}from'@jsonjoy.com/buffers/lib/cmpUint8Array';import{cmpUint8Array2}from'@jsonjoy.com/buffers/lib/cmpUint8Array2';import{cmpUint8Array3}from'@jsonjoy.com/buffers/lib/cmpUint8Array3';constisEqual=cmpUint8Array(buf1,buf2);// Returns booleanconstcomparison=cmpUint8Array2(buf1,buf2);// Returns -1, 0, or 1 (byte-first)constcomparison2=cmpUint8Array3(buf1,buf2);// Returns -1, 0, or 1 (length-first)

Type Checking

import{isUint8Array}from'@jsonjoy.com/buffers/lib/isUint8Array';import{isArrayBuffer}from'@jsonjoy.com/buffers/lib/isArrayBuffer';import{isFloat32}from'@jsonjoy.com/buffers/lib/isFloat32';if(isUint8Array(data)){/* data is Uint8Array or Buffer */}if(isArrayBuffer(data)){/* data is ArrayBuffer */}if(isFloat32(3.14)){/* number can fit in float32 */}

Conversion Functions

import{toUint8Array}from'@jsonjoy.com/buffers/lib/toUint8Array';import{bufferToUint8Array}from'@jsonjoy.com/buffers/lib/bufferToUint8Array';import{toBuf}from'@jsonjoy.com/buffers/lib/toBuf';constuint8=toUint8Array(data);// Convert various types to Uint8Arrayconstconverted=bufferToUint8Array(buf);// Convert Buffer to Uint8Arrayconstencoded=toBuf('Hello 🌍');// Convert string to UTF-8 bytes

String Utilities

import{ascii,utf8}from'@jsonjoy.com/buffers/lib/strings';constasciiBytes=ascii`Hello World`;// ASCII string to bytesconstutf8Bytes=utf8`Hello 🌍`;// UTF-8 string to bytes

UTF-8 Encoding/Decoding

High-Performance UTF-8 Decoding

import{decodeUtf8}from'@jsonjoy.com/buffers/lib/utf8/decodeUtf8';consttext=decodeUtf8(uint8Array,offset,length);

The package includes multiple optimized UTF-8 decoding implementations that automatically choose the best strategy based on:

  • Environment (Node.js vs Browser)
  • String length
  • Available APIs

UTF-8 Encoding

import{encode}from'@jsonjoy.com/buffers/lib/utf8/encode';constbytesWritten=encode(targetArray,'Hello 🌍',offset,maxLength);

Advanced UTF-8 Features

import{CachedUtf8Decoder}from'@jsonjoy.com/buffers/lib/utf8/CachedUtf8Decoder';import{isUtf8}from'@jsonjoy.com/buffers/lib/utf8/isUtf8';import{decodeAscii}from'@jsonjoy.com/buffers/lib/utf8/decodeAscii';constdecoder=newCachedUtf8Decoder();consttext=decoder.decode(uint8Array,start,length);constisValidUtf8=isUtf8(uint8Array);constasciiText=decodeAscii(uint8Array,start,length);

Special Data Types

Slice

A lightweight view into a buffer without copying data.

import{Slice}from'@jsonjoy.com/buffers/lib/Slice';constslice=newSlice(uint8Array,dataView,start,end);constsubarray=slice.subarray();// Get the actual data

Float16 Support

import{decodeF16}from'@jsonjoy.com/buffers/lib/f16';constfloat32Value=decodeF16(binaryF16Value);

Debugging Utilities

import{printOctets}from'@jsonjoy.com/buffers/lib/printOctets';console.log(printOctets(uint8Array,16));// Print hex dump of first 16 bytes

Performance

This library is designed for high performance with:

  • Optimized UTF-8 handling: Multiple implementations that choose the fastest method for each environment
  • Minimal allocations: Reusable readers and writers with buffer pooling
  • Zero-copy operations: Slices and views avoid unnecessary data copying
  • Environment-specific optimizations: Leverages Node.js Buffer APIs when available

Browser Support

Works in all modern browsers and Node.js environments. The library automatically detects available APIs and chooses the most appropriate implementation.

TypeScript Support

Full TypeScript support with comprehensive type definitions included.

License

Apache-2.0

About

Essential Node.js and browser byte array manipulation tools

Resources

License

Security policy

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp