SerializationUtils
Date: 2017-02-08

org.apache.commons.lang3

## Class SerializationUtils

- java.lang.Object
- - org.apache.commons.lang3.SerializationUtils

-     public class SerializationUtils
      extends java.lang.Object

  Assists with the serialization process and performs additional functionality based on serialization.

  - Deep clone using serialization
  - Serialize managing finally and IOException
  - Deserialize managing finally and IOException

  This class throws exceptions for invalid `null` inputs. Each method documents its behaviour in more detail.

  #ThreadSafe#

  Since:
    1.0

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `SerializationUtils()` SerializationUtils instances should NOT be constructed in standard programming.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `static <T extends java.io.Serializable> T` | `clone(T object)` Deep clone an `Object` using serialization.
    `static <T> T` | `deserialize(byte[] objectData)` Deserializes a single `Object` from an array of bytes.
    `static <T> T` | `deserialize(java.io.InputStream inputStream)` Deserializes an `Object` from the specified stream.
    `static <T extends java.io.Serializable> T` | `roundtrip(T msg)` Performs a serialization roundtrip.
    `static byte[]` | `serialize(java.io.Serializable obj)` Serializes an `Object` to a byte array for storage/serialization.
    `static void` | `serialize(java.io.Serializable obj, java.io.OutputStream outputStream)` Serializes an `Object` to the specified stream.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### SerializationUtils

          public SerializationUtils()

      SerializationUtils instances should NOT be constructed in standard programming. Instead, the class should be used as `SerializationUtils.clone(object)`.

      This constructor is public to permit tools that require a JavaBean instance to operate.

      Since:
        2.0

  - ### Method Detail

    - #### clone

          public static <T extends java.io.Serializable> T clone(T object)

      Deep clone an `Object` using serialization.

      This is many times slower than writing clone methods by hand on all objects in your object graph. However, for complex object graphs, or for those that don't support deep cloning this can be a simple alternative implementation. Of course all the objects must be `Serializable`.

      Type Parameters:
        `T` - the type of the object involved
      Parameters:
        `object` - the `Serializable` object to clone
      Returns:
        the cloned object
      Throws:
        `SerializationException` - (runtime) if the serialization fails

    - #### roundtrip

          public static <T extends java.io.Serializable> T roundtrip(T msg)

      Performs a serialization roundtrip. Serializes and deserializes the given object, great for testing objects that implement `Serializable`.
      Type Parameters:
        `T` - the type of the object involved
      Parameters:
        `msg` - the object to roundtrip
      Returns:
        the serialized and deseralized object
      Since:
        3.3

    - #### serialize

          public static void serialize(java.io.Serializable obj,
                       java.io.OutputStream outputStream)

      Serializes an `Object` to the specified stream.

      The stream will be closed once the object is written. This avoids the need for a finally clause, and maybe also exception handling, in the application code.

      The stream passed in is not buffered internally within this method. This is the responsibility of your application if desired.

      Parameters:
        `obj` - the object to serialize to bytes, may be null
        `outputStream` - the stream to write to, must not be null
      Throws:
        `java.lang.IllegalArgumentException` - if `outputStream` is `null`
        `SerializationException` - (runtime) if the serialization fails

    - #### serialize

          public static byte[] serialize(java.io.Serializable obj)

      Serializes an `Object` to a byte array for storage/serialization.

      Parameters:
        `obj` - the object to serialize to bytes
      Returns:
        a byte[] with the converted Serializable
      Throws:
        `SerializationException` - (runtime) if the serialization fails

    - #### deserialize

          public static <T> T deserialize(java.io.InputStream inputStream)

      Deserializes an `Object` from the specified stream.

      The stream will be closed once the object is written. This avoids the need for a finally clause, and maybe also exception handling, in the application code.

      The stream passed in is not buffered internally within this method. This is the responsibility of your application if desired.

      If the call site incorrectly types the return value, a `ClassCastException` is thrown from the call site. Without Generics in this declaration, the call site must type cast and can cause the same ClassCastException. Note that in both cases, the ClassCastException is in the call site, not in this method.

      Type Parameters:
        `T` - the object type to be deserialized
      Parameters:
        `inputStream` - the serialized object input stream, must not be null
      Returns:
        the deserialized object
      Throws:
        `java.lang.IllegalArgumentException` - if `inputStream` is `null`
        `SerializationException` - (runtime) if the serialization fails

    - #### deserialize

          public static <T> T deserialize(byte[] objectData)

      Deserializes a single `Object` from an array of bytes.

      If the call site incorrectly types the return value, a `ClassCastException` is thrown from the call site. Without Generics in this declaration, the call site must type cast and can cause the same ClassCastException. Note that in both cases, the ClassCastException is in the call site, not in this method.

      Type Parameters:
        `T` - the object type to be deserialized
      Parameters:
        `objectData` - the serialized object, must not be null
      Returns:
        the deserialized object
      Throws:
        `java.lang.IllegalArgumentException` - if `objectData` is `null`
        `SerializationException` - (runtime) if the serialization fails