# protostuff **Repository Path**: mirrors/protostuff ## Basic Information - **Project Name**: protostuff - **Description**: Java serialization library, proto compiler, code generator - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2019-10-13 - **Last Updated**: 2025-09-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ![Protostuff](https://protostuff.github.io/images/protostuff_300x100.png) A java serialization library with built-in support for forward-backward compatibility (schema evolution) and validation. - **efficient**, both in speed and memory - **flexible**, supporting pluggable formats ### Usecase - messaging layer in RPC - storage format in the datastore or cache For more information, go to https://protostuff.github.io/docs/ ## Maven 1. For the core formats (protostuff, protobuf, graph) ```xml io.protostuff protostuff-core 1.7.4 ``` 2. For schemas generated at runtime ```xml io.protostuff protostuff-runtime 1.7.4 ``` ## Usage ```java public final class Foo { String name; int id; public Foo(String name, int id) { this.name = name; this.id = id; } } static void roundTrip() { Foo foo = new Foo("foo", 1); // this is lazily created and cached by RuntimeSchema // so its safe to call RuntimeSchema.getSchema(Foo.class) over and over // The getSchema method is also thread-safe Schema schema = RuntimeSchema.getSchema(Foo.class); // Re-use (manage) this buffer to avoid allocating on every serialization LinkedBuffer buffer = LinkedBuffer.allocate(512); // ser final byte[] protostuff; try { protostuff = ProtostuffIOUtil.toByteArray(foo, schema, buffer); } finally { buffer.clear(); } // deser Foo fooParsed = schema.newMessage(); ProtostuffIOUtil.mergeFrom(protostuff, fooParsed, schema); } ``` ## Important (for version 1.8.x) If you are to purely use this to replace java serialization (no compatibility with protobuf), set the following system properties: ``` -Dprotostuff.runtime.always_use_sun_reflection_factory=true -Dprotostuff.runtime.preserve_null_elements=true -Dprotostuff.runtime.morph_collection_interfaces=true -Dprotostuff.runtime.morph_map_interfaces=true -Dprotostuff.runtime.morph_non_final_pojos=true ``` You can also customize it programmatically: ```java static final DefaultIdStrategy STRATEGY = new DefaultIdStrategy(IdStrategy.DEFAULT_FLAGS | IdStrategy.PRESERVE_NULL_ELEMENTS | IdStrategy.MORPH_COLLECTION_INTERFACES | IdStrategy.MORPH_MAP_INTERFACES | IdStrategy.MORPH_NON_FINAL_POJOS); ``` Use it: ```java Schema schema = RuntimeSchema.getSchema(Foo.class, STRATEGY); ``` Questions/Concerns/Suggestions ------------------------------ - subscribe to http://groups.google.com/group/protostuff/ Requirements ------------ Java 1.6 or higher Build Requirements ------------------ Maven 3.2.3 or higher Developing with eclipse ------------------ ```sh mvn install && mvn eclipse:eclipse # Open eclipse, import existing project, navigate to the protostuff module you're after, then hit 'Finish'. ```