SerializationTester.java revision e98fbf8686c5289bf03fe5c3de7ff82d3a77104d
1e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes/*
2e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more
3e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * contributor license agreements.  See the NOTICE file distributed with
4e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * this work for additional information regarding copyright ownership.
5e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
6e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * (the "License"); you may not use this file except in compliance with
7e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * the License.  You may obtain a copy of the License at
8e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes *
9e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes *
11e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * Unless required by applicable law or agreed to in writing, software
12e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
13e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * See the License for the specific language governing permissions and
15e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * limitations under the License.
16e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes */
17e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
18e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughespackage tests.util;
19e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
20e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.ByteArrayInputStream;
21e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.ByteArrayOutputStream;
22e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.File;
23e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.FileOutputStream;
24e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.IOException;
25e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.InputStream;
26e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.ObjectInputStream;
27e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.ObjectOutputStream;
28e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.OutputStream;
29e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.net.URL;
30e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
31e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes/**
32e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * This class simplifies the serialization test.
33e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes *
34e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes */
35e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughespublic class SerializationTester {
36e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
37e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/*
38e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * --------------------------------------------------------------------
39e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Class variables
40e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * --------------------------------------------------------------------
41e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
42e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
43e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	// the last deserialized object
44e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	private static Object lastOutput = null;
45e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
46e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/*
47e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * -------------------------------------------------------------------
48e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Constructors
49e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * -------------------------------------------------------------------
50e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
51e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
52e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	private SerializationTester() {
53e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
54e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
55e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
56e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/*
57e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * -------------------------------------------------------------------
58e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Methods
59e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * -------------------------------------------------------------------
60e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
61e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
62e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
63e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Serialize an object and then deserialize it.
64e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
65e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @param inputObject
66e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *            the input object
67e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @return the deserialized object
68e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
69e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public static Object getDeserilizedObject(Object inputObject)
70e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			throws IOException, ClassNotFoundException {
71e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		ByteArrayOutputStream bos = new ByteArrayOutputStream();
72e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		ObjectOutputStream oos = new ObjectOutputStream(bos);
73e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		oos.writeObject(inputObject);
74e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		oos.close();
75e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
76e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
77e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		ObjectInputStream ois = new ObjectInputStream(bis);
78e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		Object outputObject = ois.readObject();
79e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		lastOutput = outputObject;
80e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		ois.close();
81e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return outputObject;
82e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
83e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
84e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
85e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Tests the serialization and deserialization of const objects.
86e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
87e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @param inputObject
88e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *            A const object
89e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @return true if the deserialized object is the same as the input object,
90e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *         otherwise false
91e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @throws Exception
92e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *             If any occurs.
93e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
94e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public static boolean assertSame(Object inputObject) throws Exception {
95e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return inputObject == getDeserilizedObject(inputObject);
96e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
97e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
98e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
99e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Tests the serialization and deserialization of instance objects.
100e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
101e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @param inputObject
102e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *            An object
103e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @return true if the deserialized object is equal to the input object,
104e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *         otherwise false
105e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @throws Exception
106e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *             If any occurs.
107e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
108e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public static boolean assertEquals(Object inputObject) throws Exception {
109e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return inputObject.equals(getDeserilizedObject(inputObject));
110e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
111e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
112e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
113e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Tests the serialization compatibility with reference const objects.
114e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
115e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @param obj
116e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *            the object to be checked
117e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @param fileName
118e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *            the serialization output file generated by reference
119e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @return true if compatible, otherwise false
120e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @throws Exception
121e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *             If any occurs.
122e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
123e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public static boolean assertCompabilitySame(Object obj, String fileName)
124e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			throws Exception {
125e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return obj == readObject(obj, fileName);
126e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
127e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
128e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
129e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Tests the serialization compatibility with reference for instance
130e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * objects.
131e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
132e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @param obj
133e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *            the object to be checked
134e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @param fileName
135e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *            the serialization output file generated by reference
136e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @return true if compatible, otherwise false
137e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @throws Exception
138e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *             If any occurs.
139e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
140e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public static boolean assertCompabilityEquals(Object obj, String fileName)
141e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			throws Exception {
142e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return obj.equals(readObject(obj, fileName));
143e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
144e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
145e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
146e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Deserialize an object from a file.
147e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
148e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @param obj
149e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *            the object to be serialized if no serialization file is found
150e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @param fileName
151e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *            the serialization file
152e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @return the deserialized object
153e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @throws Exception
154e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *             If any occurs.
155e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
156e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public static Object readObject(Object obj, String fileName)
157e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			throws Exception {
158e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		InputStream input = null;
159e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		ObjectInputStream oinput = null;
160e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		URL url = SerializationTester.class.getClassLoader().getResource(
161e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes				fileName);
162e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		if (null == url) {
163e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			// serialization file does not exist, create one in the current dir
164e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			writeObject(obj, new File(fileName).getName());
165e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			throw new Error(
166e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes					"Serialization file does not exist, created in the current dir.");
167e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		}
168e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		input = url.openStream();
169e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		try {
170e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			oinput = new ObjectInputStream(input);
171e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			Object newObj = oinput.readObject();
172e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			return newObj;
173e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		} finally {
174e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			try {
175e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes				if (null != oinput) {
176e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes					oinput.close();
177e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes				}
178e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			} catch (Exception e) {
179e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes				// ignore
180e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			}
181e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			try {
182e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes				if (null != input) {
183e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes					input.close();
184e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes				}
185e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			} catch (Exception e) {
186e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes				// ignore
187e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			}
188e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		}
189e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
190e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
191e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/*
192e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Creates a serialization output.
193e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
194e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @param obj the object to be serialized @param fileName the output file
195e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @throws Exception If any occurs.
196e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
197e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public static void writeObject(Object obj, String fileName)
198e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			throws Exception {
199e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		// String path = SerializationTester.class.getResource(".").getPath();
200e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		// if (path.endsWith(".")) {
201e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		// path = path.substring(0, path.length() - 1);
202e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		// }
203e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		// if (!path.endsWith("/")) {
204e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		// path += "/";
205e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		// }
206e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		// path += fileName;
207e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		// System.out.println(path);
208e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		OutputStream output = null;
209e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		ObjectOutputStream ooutput = null;
210e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		try {
211e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			output = new FileOutputStream(fileName);
212e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			ooutput = new ObjectOutputStream(output);
213e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			ooutput.writeObject(obj);
214e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		} finally {
215e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			try {
216e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes				if (null != ooutput) {
217e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes					ooutput.close();
218e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes				}
219e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			} catch (Exception e) {
220e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes				// ignore
221e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			}
222e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			try {
223e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes				if (null != output) {
224e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes					output.close();
225e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes				}
226e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			} catch (Exception e) {
227e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes				// ignore
228e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			}
229e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		}
230e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
231e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
232e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/**
233e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * Gets the last deserialized object.
234e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 *
235e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * @return the last deserialized object
236e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
237e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public static Object getLastOutput() {
238e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return lastOutput;
239e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
240e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
241e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	/*
242e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 * For test purpose.
243e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	 */
244e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public static void main(String[] args) {
245e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
246e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes}
247