JBoss Marshalling is a framework which wholly replaces Java Serialization with a new API and optional optimized wire format. The standard wire format can also be used as well - giving compatibility with applications using standard serialization, but without the various bugs present therein, and with a potentially significant performance advantage.
Other features that JBoss Marshalling provides which are missing from the Java Object*Stream API include:
- Pluggable class resolvers, making it easy to customize classloader policy, by implementing a small interface (rather than having to subclass the
Object*Streamclasses) - Pluggable object replacement (also without subclassing)
- Pluggable predefined class tables, which can dramatically decrease stream size and serialization time for stream types which frequently use a common set of classes
- Pluggable predefined instance tables, which make it easy to handle remote references
- Pluggable externalizers which may be used to serialize classes which are not
Serializable, or for which an alternate strategy is needed - Customizable stream headers
- Each marshaller instance is highly configurable and tunable to maximize performance based on expected usage patterns
- A generalized API which can support many different protocol implementations, including protocols which do not necessarily provide all the above features
- Inexpensive instance creation, beneficial to applications where many short-lived streams are used
- Support for separate class and instance caches, if the protocol permits; useful for sending multiple messages or requests with a single stream, with separate object graphs but retaining the class cache