FlatBuffers Android Tutorial

FlatBuffers is an efficient cross platform serialization library for C++, Java, C#, Go, Python and JavaScript.

It was originally created at Google for game development and other performance-critical applications.

FlatBuffers is Open Source (Apache license V2) and available on GitHub.

It’s currently used by:

  • Cocos2d-x, the open source mobile game engine and used to serialize the game data.
  • Facebook uses it for client-server communication in the Android app (see the article).
  • Fun Propulsion Labs at Google in most of libraries and games.

Solution overview

  • The schema will be defind in JSON format, then it will be converted to FlatBuffer format outside the application
  • The Java classes of the Data model will be generated manually using flatc (FlatBuffer compiler)

Step 1: Build FlatBuffers

Download the source code in Google’s flatbuffers repository.

The build process is described on Google’s documentation FlatBuffers Building.

On MacOS for example:

  1. Open the xcode project FlatBuffers.xcodeproj
  2. Build the project
  3. flatc executable will appear in root directory.

Now we’re able generate model classes for a schema in different languages (Java, C#, Python, GO and C++) or convert JSON to FlatBuffer binary file.

Step 2: Prepare the schema file

Now we have to prepare schema file that defines the structure of the data we want to de-/serialize.

It will be used using flatc to generate Java data model.

I used http://www.json-generator.com/ to generate a bigger JSON file (~4mb).

The file is here.

Following the used schema:

Step 3: Generate FlatBuffers files

Now we will,

  1. Convert the json file (sample_json.json) to FlatBuffers binary file
  2. Generate Java Data Models

The command is:

The Java classes are:

  • PeopleList.java
  • People.java
  • Friend.java

Step 4:Create the Android application

Following the app/build.graddle file of the application:

Use FlatBuffers Java library

flatbuffers-java-1.2.0-SNAPSHOT.jar file can be used to handle the data format in java.

All we need is to put that jar inside the app/libs folder.

Android main activity

Following the code of the main activity:

Results

Following a screenshot of the application after parsing JSON as well as FlatBuffers data.

We can notice a huge difference between the two methods:

JSON parsing takes 1784ms while the FlatBuffers takes only 4ms!

Source code

Full source code can be found on Github.