You can get it on Nuget: https://www.nuget.org/packages/InStory.binary
RStream
and WStream
have their own object pools.
This library provides some classes for object pools:
LoadObjectPool
and PooledObject
.
If you want to make object pool for your class, you should inherit
PooledObject<T>
.
Also, if you need to do something right before Get()
method, you should
inherit ILoadOnGet
interface.
Object for reading binary serialized data from some buffer
using var r = RStream.Get();
// ...reading data into internal buffer of stream
// you can get this internal buffer using r.Buffer
var someNumber = r.ReadSignedIntLittleEndian();
var str = r.ReadString();
As you can see, you should use using
keyword.
It's because this is pooled object. Right after
function call object will be returned to the pool.
Also you can use
using(var r = RStream.Get()){
// ...
}
There RStream will be returned after block execution.
// BIG endian by default
r.ReadSignedIntLittleEndian() // Read signed int32 LITTLE endian
r.ReadUnsignedLongLittleEndian() // Read unsigned long LITTLE endian
r.ReadSignedShort() // Read signed short BIG endian
r.ReadTriad() // Read triad (3 bytes) BIG endian
r.ReadUnsignedByte() // Read unsigned byte
r.ReadByteSizedString() // 1 byte used for length (string can contain max 255 bytes)
r.ReadString() // VarInt used for length (string can contain more than 255 bytes)
We recommend to use RecyclableMemoryStreamManager
for this purpose.
Example:
// of course you shouldn't allocate manager in local variable
var manager = new RecyclableMemoryStreamManager();
...
using var r = RStream.Get();
// ...reading to r.Buffer
using var stream = manager.GetStream();
r.ReadByteArrayInto(stream);
// now stream has bytes
Object for writing binary serialized data
using var w = WStream.Get();
w.WriteSignedInt(426);
var buffer = w.Buffer;
// ...sending buffer to client or saving to file
// BIG endian by default
r.WriteSignedIntLittleEndian(-6) // Write signed int32 LITTLE endian
r.WriteUnsignedLongLittleEndian(0xAABBCCDDEE) // Write unsigned long LITTLE endian
r.WriteSignedShort(-0x7FAA) // Write signed short BIG endian
r.WriteTriad(0x7FBBCC) // Write triad (3 bytes) BIG endian
r.WriteUnsignedByte(0xFF) // Write unsigned byte
r.WriteByteSizedString("aquaminer") // 1 byte used for length (string can contain max 255 bytes)
r.WriteString("NolikTop") // VarInt used for length (string can contain more than 255 bytes)