`

谷歌开源高效、跨平台的序列化库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

分享到:
评论

相关推荐

    flatbuffers, 内存高效序列化库.zip

    flatbuffers, 内存高效序列化库 FlatBuffers FlatBuffers 是游戏和其他内存受限应用的高效跨平台序列化库。 它允许你在不先解包/解析它的情况下直接访问序列化数据,同时仍然有很大的向前。到我们的目标页面浏览我们...

    Protobuf是Google开源的高效,跨平台的序列化工具,而protostuff是一个基于pro_

    Protobuf是Google开源的高效,跨平台的序列化工具,而protostuff是一个基于pro_protostuff-runtime-bruce-1.1.3

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

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

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

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

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

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

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

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

    Google60款开源项目

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

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

    本书系统介绍了微软新一代高效、跨平台的应用平台.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工程文件”获取

    agg-2.5 AGG是一个开源、高效的跨平台2D图形库

    AGG是一个开源、高效的跨平台2D图形库。AGG的功能与GDI+的功能非常类似,但提供了比GDI+更灵活的编程接口,其产生的图形的质量也非常高(自称超过GDI+) 1.下载AGG库,它的家在http://www.antigrain.com,目前最高版本...

    Go-GMDB是一个超简单开源跨平台的电影库

    **Go-GMDB:一个超简单、开源且跨平台的电影库** Go-GMDB是一个精心设计的电影库管理系统,它利用了Go语言的强大性能和跨平台兼容性,为电影爱好者提供了全面的功能,包括搜索、记录、观看历史、喜欢的电影收藏以及...

    C++序列化组件

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

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

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

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

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

    dotnet-Unity最快的序列化反序列化工具

    这个工具被称为DreamSerialize,从其文件名"DreamSerialize-master"可以推断,它可能是开源项目,并且是针对Unity的高效序列化库。 Unity内置的序列化系统虽然方便,但在某些情况下,如处理复杂的数据结构、自定义...

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

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

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

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

    对象序列化_跨语言(JAVA)wox开源项目

    例如,JSON因其简洁性和易读性,在跨语言数据交换中非常流行,Java中可以使用Jackson或Gson库进行JSON的序列化和反序列化。 在WOX开源项目中,可能提供了专门针对Java的序列化工具或API,帮助开发者更方便地处理...

    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