package org.springframework.security.oauth2.common.util; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import org.springframework.core.ConfigurableObjectInputStream; public class SerializationUtils { public static byte[] serialize(Object state) { ObjectOutputStream oos = null; try { ByteArrayOutputStream bos = new ByteArrayOutputStream(512); oos = new ObjectOutputStream(bos); oos.writeObject(state); oos.flush(); return bos.toByteArray(); } catch (IOException e) { throw new IllegalArgumentException(e); } finally { if (oos != null) { try { oos.close(); } catch (IOException e) { // eat it } } } } public static <T> T deserialize(byte[] byteArray) { ObjectInputStream oip = null; try { oip = new ConfigurableObjectInputStream(new ByteArrayInputStream(byteArray), Thread.currentThread().getContextClassLoader()); @SuppressWarnings("unchecked") T result = (T) oip.readObject(); return result; } catch (IOException e) { throw new IllegalArgumentException(e); } catch (ClassNotFoundException e) { throw new IllegalArgumentException(e); } finally { if (oip != null) { try { oip.close(); } catch (IOException e) { // eat it } } } } }