Claude-skill-registry data-serialization
Efficient data serialization for game networking including Protobuf, FlatBuffers, and custom binary
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/data-serialization" ~/.claude/skills/majiayu000-claude-skill-registry-data-serialization && rm -rf "$T"
manifest:
skills/data/data-serialization/SKILL.mdsource content
Data Serialization for Games
Implement efficient serialization for low-latency game networking.
Format Comparison
| Format | Size | Speed | Schema | Use Case |
|---|---|---|---|---|
| Protobuf | Small | Fast | Required | Most games |
| FlatBuffers | Small | Fastest | Required | Real-time |
| MsgPack | Small | Fast | Optional | Flexible |
| JSON | Large | Slow | None | Debug |
| Custom Binary | Smallest | Fastest | Custom | Ultra-low latency |
Protocol Buffers
syntax = "proto3"; message PlayerState { uint32 player_id = 1; float x = 2; float y = 3; float z = 4; uint32 health = 5; } message GameUpdate { uint64 tick = 1; repeated PlayerState players = 2; }
GameUpdate update; update.set_tick(current_tick); auto* player = update.add_players(); player->set_player_id(1); player->set_x(pos.x); std::string serialized; update.SerializeToString(&serialized);
Custom Binary Format
struct PacketHeader { uint16_t type; uint16_t length; uint32_t sequence; }; struct PlayerUpdate { uint32_t player_id; float position[3]; uint16_t angle; // Compressed rotation uint8_t flags; }; void serialize(Buffer& buf, const PlayerUpdate& p) { buf.write_u32(htonl(p.player_id)); for (int i = 0; i < 3; i++) buf.write_float(p.position[i]); buf.write_u16(htons(p.angle)); buf.write_u8(p.flags); }
Compression Techniques
| Technique | Savings | Complexity |
|---|---|---|
| Delta | 50-80% | Medium |
| Quantization | 30-50% | Low |
| LZ4 | 50-70% | Low |
Troubleshooting
Common Failure Modes
| Error | Root Cause | Solution |
|---|---|---|
| Parse error | Version mismatch | Schema versioning |
| Large packets | No compression | Enable delta/LZ4 |
| Slow parsing | JSON in hot path | Use binary format |
| Corruption | Byte order | Use htonl/ntohl |
Debug Checklist
// Check serialized size std::string data; message.SerializeToString(&data); std::cout << "Size: " << data.size() << " bytes\n"; // Validate roundtrip Message parsed; parsed.ParseFromString(data); assert(parsed.id() == message.id());
Unit Test Template
TEST(Serialization, RoundTrip) { PlayerState original{1, 10.0f, 20.0f, 30.0f, 100}; std::string data; original.SerializeToString(&data); PlayerState parsed; parsed.ParseFromString(data); EXPECT_EQ(original.player_id(), parsed.player_id()); EXPECT_FLOAT_EQ(original.x(), parsed.x()); }
Resources
- Schema templatesassets/
- Format benchmarksreferences/