/*
* This file is part of the Jikes RVM project (http://jikesrvm.org).
*
* This file is licensed to You under the Eclipse Public License (EPL);
* You may not use this file except in compliance with the License. You
* may obtain a copy of the License at
*
* http://www.opensource.org/licenses/eclipse-1.0.php
*
* See the COPYRIGHT.txt file distributed with this work for information
* regarding copyright ownership.
*/
package test.org.jikesrvm.basic.core.serialization;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
class TestSerialization {
public static void main(String[] args) throws Exception {
//Uncomment when need to generate serialized data from jdk again
/*
try {
final ObjectOutputStream output = new ObjectOutputStream(new java.io.FileOutputStream("MySerializationData.dat"));
output.writeObject(new SerializationData());
output.close();
} catch (java.io.IOException e) {
e.printStackTrace(System.out);
}
*/
final byte[] data = loadData();
try {
final ObjectInputStream input = new ObjectInputStream(new ByteArrayInputStream(data));
System.out.println("Attemping read");
final SerializationData ts = (SerializationData) input.readObject();
System.out.println("Existing serialization read");
System.out.println(ts);
} catch (java.io.IOException e) {
e.printStackTrace(System.out);
} catch (ClassNotFoundException e) {
e.printStackTrace(System.out);
}
byte[] bytes = new byte[0];
try {
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final ObjectOutputStream output = new ObjectOutputStream(baos);
System.out.println("Attemping write");
SerializationData sd = new SerializationData();
sd.jitter();
output.writeObject(sd);
output.flush();
output.close();
bytes = baos.toByteArray();
System.out.println("write success. Checking consistency of data written ...");
System.out.println("actual.length (" + bytes.length + ") vs expected.length (" + data.length);
for (int i = 0; i < data.length && i < bytes.length; i++) {
if(data[i] != bytes[i]) {
System.out.println("data differs at " + i);
break;
}
}
} catch (java.io.IOException e) {
e.printStackTrace(System.out);
}
try {
final ObjectInputStream input = new ObjectInputStream(new ByteArrayInputStream(bytes));
System.out.println("Attemping read of output data");
final SerializationData ts = (SerializationData) input.readObject();
System.out.println("Existing serialization read");
System.out.println(ts);
} catch (java.io.IOException e) {
e.printStackTrace(System.out);
} catch (ClassNotFoundException e) {
e.printStackTrace(System.out);
}
}
private static byte[] loadData() throws IOException {
final String resource = "SerializationData.dat";
System.out.println("Loading resource " + resource);
final InputStream input = TestSerialization.class.getResourceAsStream(resource);
System.out.println("Loaded resource? = " + (null != input));
final int size = input.available();
final byte[] data = new byte[size];
int count = 0;
while (count < data.length) {
count += input.read(data, count, data.length - count);
}
return data;
}
}