package com.github.wangxuehui.rpc.serializer.jdk;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import com.github.wangxuehui.rpc.serializer.Deserializer;
import com.github.wangxuehui.rpc.serializer.Serializer;
public class JdkObjectSerializer implements Serializer, Deserializer {
@Override
public <T> T deserialize( final byte[] bytes , final Class<T> clazz ) {
final ByteArrayInputStream in = new ByteArrayInputStream( bytes );
try {
final ObjectInputStream ois = new ObjectInputStream( in );
Object obj = ois.readObject();
return clazz.cast( obj );
}
catch ( final ClassNotFoundException e ) {
throw new IllegalStateException( e.getMessage() , e );
}
catch ( final IOException e ) {
throw new IllegalStateException( e.getMessage() , e );
}
finally {
try {
in.close();
}
catch ( final IOException e ) {
throw new IllegalStateException( e.getMessage() , e );
}
}
}
@Override
public <T> byte[] serialize( final T source ) {
final ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
final ObjectOutputStream oos = new ObjectOutputStream( out );
oos.writeObject( source );
oos.flush();
}
catch ( final IOException e ) {
throw new IllegalStateException( e.getMessage() , e );
}
finally {
try {
out.close();
}
catch ( final IOException e ) {
throw new IllegalStateException( e.getMessage() , e );
}
}
return out.toByteArray();
}
}