`

谷歌开源高效、跨平台的序列化库FlatBuffers

 
阅读更多

近日,谷歌“Fun Propulsion Labs”团队 开源了FlatBuffers 。该库的构建是专门为游戏开发人员的性能需求提供支持,它将序列化数据存储在缓存中,这些数据既可以存储在文件中,又可以通过网络原样传输,而不需要任何解析开销。

FlatBuffers有如下一些关键特性——

  • 访问序列化数据不需要打包/拆包
  • 节省内存而且访问速度快——缓存只占用访问数据所需要的内存;不需要任何额外的内存。
  • 灵活性——通过可选字段向前向后兼容
  • 代码规模小
  • 强类型——错误在编译时捕获,而不是在运行时
  • 便利性——生成的C++头文件代码简洁。如果需要,有一项可选功能可以用来在运行时高效解析Schema和JSON-like格式的文本。
  • 跨平台——使用C++编写,不依赖STL之外的库,因此可以用于任何有C++编辑器的平台。当前,该项目包含构建方法和在Android、Linux、Windows和OSX等操作系统上使用该库的示例。

与Protocol Buffers或JSON Parsing这样的可选方案相比,FlatBuffers的优势在于开销更小,这主要是由于它没有解析过程。

在C++中使用FlatBuffers包含以下步骤——

  • 使用专用的DSL 创建schema文件
  • 使用schema编译器 生成C++头文件
  • 在用户程序中包含生成的头文件(而且需要在路径中包含flatbuffers/flatbuffers.h文件)
  • 使用FlatBufferBuilder类(它会构造一个平面二进制缓冲区) 读写数据

正如前期 讨论组 中的讨论,FlatBuffers明显有些不完善的地方。对Java的支持还在试验阶段。对C3#的支持是要求最多的功能之一,可能在下个版本提供。

读者可以查阅 文档 来了解更多信息。

Cap’n Proto 也是一个值得了解一下的项目,它旨在通过避免编码/解码过程来获得性能收益。

查看英文原文:Google Open-Sources FlatBuffers:Efficient, Cross-Platform, Serialization Library

分享到:
评论

相关推荐

    Python-Cista是一个开源的简单C序列化反序列化库

    Python-Cista是一个专门为C语言设计的轻量级序列化与反序列化库,它强调了简单性和效率。在Python世界中,序列化通常用于将数据结构转化为可存储或传输的格式,而反序列化则是将这些格式恢复为原始的数据结构。Cista...

    FlatBuffers:高效内存序列化库-开源

    FlatBuffers是一个开放源代码,跨平台的序列化库,旨在最大程度地提高内存效率。 FlatBuffers最初由Google创建,用于游戏开发和其他对性能有严格要求的应用程序,它具有独特的功能,可让您直接访问序列化数据,而...

    跨平台网络开发库合集(C 语言) 2021-01-22 最新源代码

    在IT行业中,跨平台网络开发库对于构建可移植性强、高效稳定的网络应用至关重要。本合集包含四个知名的C语言编写的网络库:libevent、libev、libuv和libhv,它们都为开发者提供了强大的异步事件处理能力,使得编写高...

    C++设计模式--基于Qt4开源跨平台开发框架

    《C++设计模式--基于Qt4开源跨平台开发框架》一书主要探讨了如何在C++编程中利用设计模式,并结合Qt4框架进行高效的跨平台应用开发。设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板...

    开源的跨平台计算机视觉库opencv-4.10.0-windows

    OpenCV最新版是一款专业、开源的跨平台计算机视觉和机器学习软件库。OpenCV官方版能够与多个编程工具相连,极大的提高了开发人员代码编辑的效率。

    kotlinx.serialization,Kotlin跨平台/多格式序列化.zip

    总结起来,Kotlinx.Serialization是一个功能强大且灵活的序列化库,它通过编译器插件提供高效、类型安全的序列化解决方案,并支持跨平台开发。结合其丰富的注解和可扩展的架构,开发者可以轻松地处理各种序列化场景...

    SDL(Simple DirectMedia Layer)是一套开源的跨平台多媒体开发库

    SDL(Simple DirectMedia Layer)是一套开源的跨平台多媒体开发库,使用C语言写成,旨在通过OpenGL和Direct3D提供对音频、键盘、鼠标、操纵杆和图形硬件的低级别访问。它提供了绘制图像、播放声音、获取键盘输入等...

    5C++设计模式--基于Qt4开源跨平台开发框架 完整清晰版中文PDF.zip

    好东西一定得分享,自己现阶段需要好好学习一下QT。C++设计模式--基于Qt4开源跨平台开发框架 完整清晰版中文PDF。好东西而且分数不贵!解压密码qt。

    Google60款开源项目

    本文档记录了60项,包括Web 前端框架 Angular;Java 常用库 Guava;序列化库 FlatBuffers,等等Google的60款开源项目,均可下载。

    CSerialPort:基于C ++的轻量级开源跨平台串口类库基于C ++的轻量级跨平台串行端口库

    基于C ++的轻量级开源跨平台串口类库,可以轻松实现跨平台多操作系统的串口读写 设计原则 跨平台 简单易用 高效 平台平台 CSerialPort已经在以下平台做过测试: DOS(x86_64) Windows(x86_64) Linux(x86_64,...

    微软开源跨平台移动开发实践 源码

    本书系统介绍了微软新一代高效、跨平台的应用平台.NET Core 1.0。借助.NET Core,原本只能运行在Windows 上的.NET 应用可以运行在Linux、OS X甚至是UNIX上。结合微软的Apache Cordova 和Xamarin 等工具,可以构建从...

    开源跨平台XML解析器-LIBXML2--库-SOLARIS10/SPARC

    开源跨平台XML解析器-LIBXML2--库-SOLARIS10/SPARC,源代码可从http://xmlsoft.org/downloads.html或资源“开源跨平台XML解析器-LIBXML2--C源代码及VC6工程文件”获取

    C++序列化组件

    6. **protobuf**: Google开源的Protocol Buffers是一种高效的数据序列化协议,它能够将结构化数据序列化,可用于数据存储、通信协议等方面。它提供了C++接口,并支持多种语言。 7. **Windows特定的序列化**: 在...

    node-msgpack, 面向NodeJS的空间高效对象序列化库.zip

    node-msgpack, 面向NodeJS的空间高效对象序列化库 node-msgpack 是 NodeJS插件的插件,提供使用 MessagePack插件库序列化和序列化JavaScript对象的API 。 原生 JSON 对象相比,这里插件的性能并不太差,序列化数据所...

    【QGIS跨平台编译】之【zlib跨平台编译】:Windows环境下编译成果(支撑QGIS跨平台编译,以及二次研发)

    QGIS的跨平台编译需要一系列开源库的支持,本系列提供QGIS相关的编译成果。 本资源的内容为:基于Qt的zlib跨平台编译成果(Windows版本)。 二、使用人群 QGIS编译、QGIS跨平台编译的人员或研究者。 三、使用场景及...

    vcl插件是一款免费、自由、开源的跨平台多媒体播放器及框架

    VCL(Virtual Container Library)是一种强大的插件和多媒体播放器框架,它的主要特点是免费、自由且开源,允许开发者在各种操作系统上构建跨平台的应用程序。VCL的核心设计理念是提供一个统一的接口,使得开发者...

    国产的跨平台的开源gui 框架

    标题中的“国产的跨平台的开源GUI框架”指的是由中国开发者创建的一种图形用户界面(GUI)开发框架,它具有跨平台的特性,可以在多种操作系统上运行,如Windows、Linux、macOS等。这样的框架通常采用开源许可证,...

    Apple 团队开源的基于 Google Protocol Buffer ("protobuf") 序列化技术的运行时库.zip

    Apple团队开源的基于Google Protocol Buffer(简称protobuf)序列化技术的运行时库是一个重要的软件开发资源,特别是对于那些使用Swift编程语言的开发者来说。Protocol Buffers是一种高效的数据序列化协议,由Google...

    Java序列化Jar包

    Protocol Buffers是Google开源的一种数据序列化协议,它定义了一种结构化的数据格式,可以用于各种语言之间的数据交换。相比XML和JSON,Protobuf的序列化结果更小、更快,因为它使用二进制格式。在Java环境中,...

    c++设计模式--基于Qt4开源跨平台开发框架(源代码)

    c++设计模式--基于Qt4开源跨平台开发框架(源代码)c++设计模式--基于Qt4开源跨平台开发框架(源代码)c++设计模式--基于Qt4开源跨平台开发框架(源代码)c++设计模式--基于Qt4开源跨平台开发框架(源代码)c++设计模式--...

Global site tag (gtag.js) - Google Analytics