Langsung ke konten utama

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.




Komentar

Postingan populer dari blog ini

Android Tutorial: Use LeakCanary to detect memory leaks

Overview The memory leak can be a headache to detect and to resolve, small memory leaks can be hidden and may be seen after a long usage of the application and hunting memory leaks is not a simple task. In this tutorial we will create a leaked application and we will use the LeakCanary library to detect the memory leak. Step 1: add the LeakCanary dependency to the application Modify the app/build.gradle to add the LeakCanary dependency as follows: Step 2: Extend and configure the Application class We need to call LeakCanary.install in onCreate method: Step 3: Create a leaked activity For this we will create a singleton class that saves the context: Then, the main activity (leaked one), will use the singleton and then we'll go to a new activity: Then, in the new activity we'll call System.gc to force the garbage collector in order to accelerate the analysis. Step 4: Retrieve the analysis result A nice notification can be shown: The result can be retrieved from logcat: Source c...

QR-Code Generator - Library

In this Post, I introduce my new Gradle Library. This Library is used to Generate QR Code Automatically for our specified input. How to Import the Library: Gradle: compile 'androidmads.library.qrgenearator:QRGenearator:1.0.0' Permission: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> How to use this Library: After importing this library, use the following lines to use this library. The following lines are used to generated the QR Code // Initializing the QR Encoder with your value to be encoded, type you required and Dimension QRGEncoder qrgEncoder = new QRGEncoder(inputValue, null, QRGContents.Type.TEXT, smallerDimension); try { // Getting QR-Code as Bitmap bitmap = qrgEncoder.encodeAsBitmap(); // Setting Bitmap to ImageView qrImage.setImageBitmap(bitmap); } catch (WriterException e) { Log.v(TAG, e.toString()); } Save QR Code as Image // Save with location, value, bitmap returned and type of Image(JPG/PNG). QRGSaver.save(s...