1.2.6 • Published 5 years ago

@egret/ts-binary-serializer v1.2.6

Weekly downloads
1
License
MIT
Repository
-
Last release
5 years ago

ts-binary-serializer

Binary serializer for typescript

Quick Start

Install

npm install ts-binary-serializer --save

enable decorators on tsconfig.json

"experimentalDecorators": true
import {BinaryDeserialize,BinarySerialize, seralizeField, DataType} from 'ts-binary-serializer';

class A{
    @SerializeField(DataType.String)
    public str:string = "HelloWorld";
}
let d = BinarySerialize(new A(),A); // [ 9, 0, 10, 72, 101, 108, 108, 111, 87, 111, 114, 108, 100 ]
let d1 = BinaryDeserialize(A,d); // A { str: 'HelloWorld' }

Usage

//Serialize
export function BinarySerialize <T> (obj : T,type?:{new():T}):ArrayBuffer

//Deserialize
export function BinaryDeserialize<T>(type:{new():T},databuffer:ArrayBuffer): T |null

sample

classA{
//...
}

let a1 = new ClassA();
let data = BinarySerialize(a,ClassA);
let a2 = BinaryDeserialize(ClassA,data);

Decorator

//Decorator @seralizeField
export function SerializeField(type : DataType,array:boolean = false,ptype?:any)

//All support DataType
//remark: all js [Number] type can be attached with strict typed [DataType],
//Use shorter [DataType] may have smaller binary serialization size.But result will be different if there has numeric overflow.
export enum DataType {
    Null,
    Float32,
    Float64,
    Int32,
    Int16,
    Int8,
    Uint32,
    Uint16,
    Uint8,
    String,
    Bool,
    Object
}

Typed Array

set the second param of @seralizeField to true when the property is an Array object.

class ClassA{
    @SerializeField(DataType.String,true)
    public stringArray:string[];
    @SerializeField(DataType.Float32,true)
    public numAry:Array<Number>;
}

Nested Class

class ClassB{
    @SerializeField(DataType.Bool)
    public valid:boolean;
}
class ClassC{
    @SerializeField(DataType.Object,false,ClassB)
    public b:ClassB;
}
// ...
let buffer = BinarySerialize(new ClassC())

nested class array is also supported.

class ClassC{
    @SerializeField(DataType.Object,true,ClassB)
    public b:ClassB[];
}

Benchmark

simple benchmark

typeSize(byte)SerializeTime(ms)DeserializeTime(ms)
Json6413957.02958.5726
Binary15742019.187119.8457

License

MIT

1.2.6

5 years ago

1.2.5

5 years ago

1.2.3

5 years ago

1.2.2

5 years ago

1.2.1

5 years ago

1.2.0

5 years ago