BitBuffer
Blazing-fast BitBuffer for Roblox.
#
Usagelocal ReplicatedStorage = game:GetService("ReplicatedStorage")local BitBuffer = require(ReplicatedStorage.Packages.BitBuffer)
local PlayerData = {}PlayerData.__index = PlayerData
function PlayerData.new(serialized: string?) local buffer = BitBuffer.FromBase91(serialized or "")
return setmetatable({ Money = buffer:ReadUInt(32); Experience = buffer:ReadUInt(16); AverageFps = buffer:ReadFloat32(); CustomName = buffer:ReadString(); }, PlayerData)end
function PlayerData:Serialize(): string local buffer = BitBuffer.new() buffer:WriteUInt(32, self.Money) buffer:WriteUInt(16, self.Experience) buffer:WriteFloat32(self.AverageFps) buffer:WriteString(self.CustomName)
return buffer:ToBase91()end
export type PlayerData = typeof(PlayerData.new())return PlayerData
#
DocsDocumentation can be found here. Keep in mind this is work in progress.
#
Minimal tutorialThe available types are:
- UInt
- Int
- Bool
- Char
- Bytes
- String
- Float32
- Float64
You can serialize the buffer into:
- String
- Base64
- Base91 (recommended for DataStores)
- Base128
Using the methods BitBuffer::ToString()
, BitBuffer::ToBase64()
, BitBuffer::ToBase91()
and BitBuffer::ToBase128()
.
Create a new BitBuffer with one of the following constructors:
- new
- FromString
- FromBase64
- FromBase91
- FromBase128
Write/Read methods are buffer:Write<type name>
/buffer:Read<type name>
.
For example:
buffer:WriteUInt(32, 1)buffer:ReadString()buffer:WriteBool(true)
A BitBuffer has a cursor, indexed in bits, which increases every time something is written/read.
local buffer = BitBuffer.new() -- The cursor's position is 0buffer:WriteUInt(16, 1) --> It's now 16buffer:WriteFloat64() --> It's now 80buffer:ResetCursor() --> It's now 0buffer:ReadUInt(16) --> It's now 16
A BitBuffer also keeps track of its size.
local buffer = BitBuffer.new() --> Size is 0buffer:WriteUInt(32, 80) --> Size is 32buffer:WriteFloat64() --> Size is 96buffer:ResetCursor() --> Size is still 96buffer:ReadUInt(32) --> Size is still 96buffer:ResetBuffer() --> Size is now 0
The rest of the methods are:
buffer:ResetCursor(): ()buffer:SetCursor(position: number): ()buffer:GetCursor(): numberbuffer:ResetBuffer(): ()buffer:GetSize(): number