This avoids the following allocations over repeated use: - A ``CharsetEncoder`` - A byte array to contain the contents of the string - A wrapper, via ``ByteBuffer#wrap``, for the previously mentioned byte array This also removes a copy of the temporary byte array. This extra copy is needed because ``String#getBytes`` returns a byte array and its length must match the exact size of the contents. This implementation requires that the builder retain a ``ByteBuffer`` and ``CharEncoder``. This is considered slower only for users that will only allocate a single string in their buffers or none at all. The improvement is especially potent if the builder is constantly reused by its caller. This also eliminates the penalty for users that do not use strings at all since the cost of allocating these fields is now amortized. The only allocation left in this code is a ``CharBuffer`` wrapper. It's possible to eliminate this allocation using an additional copy but need further profiling to see which is the bigger problem.
FlatBuffers 
FlatBuffers is an efficient cross platform serialization library for games and other memory constrained apps. It allows you to directly access serialized data without unpacking/parsing it first, while still having great forwards/backwards compatibility.
Go to our landing page to browse our documentation.
Supported operating systems
- Android
- Windows
- MacOS X
- Linux
Supported programming languages
- C++
- C#
- C
- Go
- Java
- JavaScript
- PHP
- Python
and many more in progress...
Contribution
- FlatBuffers Google Group to discuss FlatBuffers with other developers and users.
- FlatBuffers Issues Tracker to submit an issue.
- stackoverflow.com with
flatbufferstag for any questions regarding FlatBuffers.
To contribute to this project, see CONTRIBUTING.
Integration
For applications on Google Play that integrate this tool, usage is tracked.
This tracking is done automatically using the embedded version string
(flatbuffer_version_string), and helps us continue to optimize it. Aside from
consuming a few extra bytes in your application binary, it shouldn't affect
your application at all. We use this information to let us know if FlatBuffers
is useful and if we should continue to invest in it. Since this is open
source, you are free to remove the version string but we would appreciate if
you would leave it in.
Licensing
Flatbuffers is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.