package ser;
import com.cedarsoftware.util.DeepEquals;
import junit.framework.Assert;
import org.junit.Test;
import org.nustaq.serialization.FSTConfiguration;
import org.nustaq.serialization.FSTObjectInput;
import org.nustaq.serialization.FSTObjectOutput;
import org.nustaq.serialization.serializers.FSTCollectionSerializer;
import java.io.IOException;
import java.io.Serializable;
import java.util.Stack;
/**
* Created by ruedi on 20.11.2014.
*/
public class GitHub39 {
static class OneStackClass implements Serializable {
Stack<String> a;
public OneStackClass(Stack<String> a) {
this.a = a;
}
}
static class TwoStackClass implements Serializable {
Stack<String> a;
Stack<String> b;
public TwoStackClass(Stack<String> a, Stack<String> b) {
this.a = a;
this.b = b;
}
}
@Test
public void test() {
OneStackClass osc = new OneStackClass(new Stack<String>());
byte[] mywriteMethod1 = FSTSerialization.mywriteMethod(osc);
OneStackClass myreadMethod1 = FSTSerialization.myreadMethod(mywriteMethod1, OneStackClass.class);
Assert.assertTrue(DeepEquals.deepEquals(osc,myreadMethod1));
//
TwoStackClass tsc = new TwoStackClass(new Stack<String>(), new Stack<String>());
byte[] mywriteMethod2 = FSTSerialization.mywriteMethod(tsc);
TwoStackClass myreadMethod2 = FSTSerialization.myreadMethod(mywriteMethod2, TwoStackClass.class);
Assert.assertTrue(DeepEquals.deepEquals(tsc,myreadMethod2));
}
static public class FSTSerialization {
final static FSTConfiguration configuration;
public static FSTConfiguration getConfiguration() {
return configuration;
}
static {
configuration = FSTConfiguration.createDefaultConfiguration();
// configuration.setShareReferences(true);
// configuration.registerSerializer(Stack.class,new FSTCollectionSerializer(), true);
configuration.registerClass(
Stack.class,
String.class
);
}
public static <T> T myreadMethod(byte[] stream, Class<T> c) {
FSTObjectInput in = configuration.getObjectInput(stream);
T result = null;
try {
result = (T) in.readObject(c);
} catch (Exception ex) {
ex.printStackTrace();
}
return result;
}
@SuppressWarnings("null")
public static byte[] mywriteMethod(Object toWrite) {
return mywriteMethod(null, toWrite);
}
public static byte[] mywriteMethod(byte[] stream, Object toWrite) {
FSTObjectOutput out = configuration.getObjectOutput(stream);
try {
out.writeObject(toWrite, toWrite.getClass());
} catch (IOException ex) {
ex.printStackTrace();
}
try {
out.flush();
} catch (IOException ex) {
ex.printStackTrace();
}
return out.getBuffer();
}
}
}