# smart-buffer

Introduction

smart-buffer s a Buffer wrapper that adds functionalities such as automatic read/write offset tracking, string manipulation, data insertion, and more.

How to Install

ohpm install @ohos/smart-buffer 

For details, see Installing an OpenHarmony HAR.

How to Use

1.simple use

import { SmartBuffer, SmartBufferOptions } from '@ohos/smart_buffer
    let packet = new SmartBuffer();
    packet.writeUInt16LE(0x0060);
    packet.writeStringNT(username);
    packet.writeStringNT(password);
    packet.writeUInt8(age);
    packet.writeStringNT(country);
    packet.insertUInt16LE(packet.length - 2, 2);

2.creat SmartBuffer object

let buff = SmartBuffer.fromBuffer(buffer);
let buff = SmartBuffer.fromBuffer(buffer, 'ascii'); 

let buff = SmartBuffer.fromSize(1024); 
let buff = SmartBuffer.fromSize(1024, 'utf8');

let buff = SmartBuffer.fromOptions({
    size: 1024,
    encoding: 'ascii'
});
let buff = SmartBuffer.fromOptions({
    buff: buffer
});
let buff = SmartBuffer.fromBuffer(Buffer.from('some string', 'utf8'));
let buff = new SmartBuffer();

3.Writing and inserting data in SmartBuffer.

let buff = SmartBuffer.fromBuffer(new Buffer([1,2,3,4,5,6]));
buff.writeInt8(7, 2);

let buff = SmartBuffer.fromBuffer(new Buffer([1,2,3,4,5,6]));
buff.insertInt8(7, 2);

Available APIs

interface name parameter return explanation
fromBuffer buff: Buffer.Buffer, encoding?: Buffer.BufferEncoding SmartBuffer Using the provided buffer (Buffer) and optional encoding, create a new SmartBuffer instance
fromSize size: number, encoding?: Buffer.BufferEncoding SmartBuffer Create a new SmartBuffer instance using the provided internal buffer size and optional encoding
fromOptions options: SmartBufferOptions SmartBuffer Create a new SmartBuffer instance using the provided SmartBufferOptions or a failure callback
readInt8 offset?: number number Read an Int8 value from the current read position or an optionally provided offset.
readInt16BE offset?: number number Read an Int16BE (16-bit integer in big-endian order) value from the current read position or an optionally provided offset.
readInt16LE offset?: number number Read an Int16LE (16-bit integer in little-endian order) value from the current read position or an optionally provided offset.
readInt32BE offset?: number number Read an Int32BE (32-bit integer in big-endian order) value from the current read position or an optionally provided offset.
readInt32LE offset?: number number Read an Int32LE (32-bit integer in little-endian order) value from the current read position or an optionally provided offset.
readBigInt64BE offset?: number bigint Read a BigInt64BE (64-bit big integer in big-endian order) value from the current read position or an optionally provided offset.
readBigInt64LE offset?: number bigint Read a BigInt64LE (64-bit big integer in little-endian order) value from the current read position or an optionally provided offset.
writeInt8 value: number, offset?: number SmartBuffer Write an Int8 (8-bit integer) value to the current write position (or at an optional offset).
insertInt8 value: number, offset: number SmartBuffer Insert an Int8 (8-bit integer) value at a given offset position.
writeInt16BE value: number, offset?: number SmartBuffer Write an Int16BE (16-bit integer in big-endian order) value to the current write position (or at an optional offset).
insertInt16BE value: number, offset: number SmartBuffer nsert an Int16BE (16-bit integer in big-endian order) value at a given offset position.
writeInt16LE value: number, offset?: number SmartBuffer Write an Int16LE (16-bit integer in little-endian order) value to the current write position (or at an optional offset).
insertInt16LE value: number, offset: number SmartBuffer Insert an Int16LE (16-bit integer in little-endian order) value at a given offset position.
writeInt32BE value: number, offset?: number SmartBuffer When dealing with files or data streams, Int32BE refers to a 32-bit integer represented in "big-endian byte order"
insertInt32BE value: number, offset: number SmartBuffer Insert an Int32BE value at a given offset position.
writeInt32LE value: number, offset?: number SmartBuffer Write an Int32LE value to the current write position.
insertInt32LE value: number, offset: number SmartBuffer Insert an Int32LE value at a given offset position.
writeBigInt64BE value: bigint, offset?: number SmartBuffer Write a BigInt64BE value to the current write position.
insertBigInt64BE value: bigint, offset: number SmartBuffer Insert a BigInt64BE value at a given offset position.
writeBigInt64LE value: bigint, offset?: number number Write a BigInt64LE value to the current write position.
insertBigInt64LE value: bigint, offset: number SmartBuffer insert a BigInt64LE valueat a given offset position.
readUInt8 offset: number number Read a UInt8 value from the current read position or an optionally provided offset.
readUInt16BE offset?: number number Read a UInt16BE value from the current read position or an optionally provided offset.
readUInt16LE offset?: number number Read a UInt16LE value from the current read position or an optionally provided offset.
readUInt32BE offset?: number number Read a UInt32BE value from the current read position or an optionally provided offset.
readUInt32LE offset?: number number Read a UInt32LE value from the current read position or an optionally provided offset.
readBigUInt64BE offset?: number bigint Read a BigUInt64BE value from the current read position or an optionally provided offset.
readBigUInt64LE offset?: number bigint Read a BigUInt64LE value from the current read position or an optionally provided offset.
writeUInt8 value: number, offset?: number SmartBuffer Write a UInt8 value to the current write position.
insertUInt8 value: number, offset: number SmartBuffer Insert a UInt8 value at a given offset position.
writeUInt16BE value: number, offset?: number SmartBuffer Write a UInt16BE value to the current write position.
insertUInt16BE value: number, offset: number SmartBuffer Insert a UInt16BE value at a given offset position.
writeUInt16LE value: number, offset?: number SmartBuffer Write a UInt16LE value to the current write position.
insertUInt16LE value: number, offset: number SmartBuffer Insert a UInt16LE value at a given offset position.
writeUInt32BE value: number, offset?: number SmartBuffer Write a UInt32BE value to the current write position.
insertUInt32BE value: number, offset: number SmartBuffer Insert a UInt32BE value at a given offset position.
writeUInt32LE value: number, offset?: number SmartBuffer Write a UInt32LE value to the current write position.
insertUInt32LE value: number, offset: number SmartBuffer Insert a UInt32LE value at a given offset position.
writeBigUInt64BE value: bigint, offset?: number SmartBuffer Write a BigUInt64BE value to the current write position.
insertBigUInt64BE value: bigint, offset: number SmartBuffer Insert a BigUInt64BE value at a specified offset
writeBigUInt64LE value: bigint, offset?: number SmartBuffer Write a BigUInt64LE value at the current write position
insertBigUInt64LE value: bigint, offset: number SmartBuffer Insert a BigUInt64LE value at a specified offset
readFloatBE offset?: number number Read a FloatBE value from the current read position or an optional offset
readFloatLE offset: number number Read a FloatLE value from the current read position or an optional offset
writeFloatBE value: number, offset?: number SmartBuffer Write a FloatBE value at the current write position
insertFloatBE value: number, offset: number SmartBuffer Insert a FloatBE value at a specified offset
writeFloatLE value: number, offset?: number SmartBuffer Write a FloatLE value at the current write position
insertFloatLE value: number, offset: number SmartBuffer Insert a FloatLE value at a specified offset
readDoubleBE offset?: number number Read a DoubleBE value from the current read position or an optional offset
readDoubleLE offset: number number Read a DoubleLE value from the current read position or an optional offset
writeDoubleBE value: number, offset?: number SmartBuffer Write a DoubleBE value at the current write position
insertDoubleBE value: number, offset: number SmartBuffer Insert a DoubleBE value at a specified offset
writeDoubleLE value: number, offset?: number SmartBuffer Write a DoubleLE value at the current write position
insertDoubleLE value: number, offset: number SmartBuffer Insert a DoubleLE value at a specified offset
readString arg1?: number / Buffer.BufferEncoding, encoding?: Buffer.BufferEncoding string Read a string from the current read position
insertString value: string, offset: number, encoding?: Buffer.BufferEncoding SmartBuffer Insert a string
writeString value: string, arg2?: number / Buffer.BufferEncoding, encoding?: Buffer.BufferEncoding SmartBuffer Write a string
readStringNT encoding?: Buffer.BufferEncoding string Read a null-terminated string from the current read position
insertStringNT value: string, offset: number, encoding?: Buffer.BufferEncoding SmartBuffer Insert a null-terminated string
writeStringNT value: string, arg2?: number / Buffer.BufferEncoding, encoding?: Buffer.BufferEncoding SmartBuffer Write a null-terminated string
readBuffer length?: number Buffer.Buffer Read a buffer from the current read position within the internal buffer
insertBuffer value: Buffer.Buffer, offset: number SmartBuffer Insert a buffer at the current write position
writeBuffer value: Buffer.Buffer, offset?: number SmartBuffer Write a buffer at the current write position
readBufferNT None Buffer.Buffer Read a null-terminated buffer from the current read position
insertBufferNT value: Buffer.Buffer, offset: number SmartBuffer Insert a null-terminated buffer
writeBufferNT value: Buffer.Buffer, offset?: number SmartBuffer Write a null-terminated buffer
clear None SmartBuffer Clear the SmartBuffer instance to its original empty state
remaining None number Retrieve the remaining data to be read from the SmartBuffer instance
readOffset None number Get the current read offset value of the SmartBuffer instance
readOffset offset: number void Set the read offset value of the SmartBuffer instance
writeOffset None number Get the current write offset value of the SmartBuffer instance
writeOffset offset: number void Set the write offset value of the SmartBuffer instance
encoding None Buffer.BufferEncoding Get the currently set string encoding for the SmartBuffer instance
encoding encoding: Buffer.BufferEncoding void Set the string encoding for the SmartBuffer instance
internalBuffer None Buffer.Buffer Retrieve the underlying internal buffer
toBuffer None Buffer.Buffer Get the value of the internally managed buffer
toString encoding?: Buffer.BufferEncoding string Get the string value of the internally managed buffer
destroy None SmartBuffer Destroy the SmartBuffer instance

Constraints

  • DevEco Studio : 5.0.3.300SP2

  • OpenHarmony SDK:API12 (5.0.0.22)

Directory Structure

|---- smart_buffer
|     |---- entry  # Sample code
|     |---- buffer  # lib
|	    |----src
          |----main
              |----ets
                  |----smartbuffer.ts #core logic
                  |----utils.ts #utils
|           |---- index.ets  # external Interface
|     |---- README.md  # Readme                 

About obfuscation

  • Code obfuscation, please seeCode Obfuscation
  • If you want the smart_buffer library not to be obfuscated during code obfuscation, you need to add corresponding exclusion rules in the obfuscation rule configuration file obfuscation-rules.txt:
-keep
./oh_modules/@ohos/smart_buffer

How to Contribute

If you find any problem during the use, submit an issue or a PR to us.

License

This project is licensed under MIT LICENSE. Welcome to enjoy and participate in the open source.