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...

Download file using Okio in Android

Okio is a library that complements java.io and java.nio to make it much easier to access, store, and process your data. Simply Okio is a modern I/O API for Java.  In this post, we will see how to download image or any file using Okio. Okio is component for OkHttp Coding Part Create a new project in Android Studio. Add following dependencies to your  app-level  build.gradle  file. compile 'com.squareup.okhttp3:okhttp:3.6.0' Don't forget to add the following permission in your AndroidManifest.xml <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> Implementation Paste the following code in your Activity and Here, I have kept as MainActivity.java public void downloadImg(View view) { try { Request request = new Request.Builder() .url(imageLink) .build(); new OkHttpClient().newCall(request).enqueue(new Callback() { @Override public void onFail...