Lendo arquivo serializado - invalid stream header

Pessoal; estou com um problema para ler um arquivo que estou serializando.

Primeiramente o modelo de classes que eu salvo em arquivo:

[code]public class ControladoraWrapper implements Serializable {

private static final long serialVersionUID = 1L; //as sub entidades diretas também tem serialversion, mas abaixo destas nem todas.

private Date dataGeracao;

private Classe1 classe1;

private List<Classe2> classe2;
   
    // mais algumas listas de classes, getters e setters.

}[/code]

Agora como que estou serializando o meu objeto:

[code] //populo o meu objeto anterior com todos os campos
wrapper.setDataGeracao(new Date());
String nomeArquivo = wrapper.getClasse1.getNome() + “_” + sdf.format(wrapper.getDataGeracao()) + “.bin”;
String arquivoCompleto = StringUtils.trim(StaticVars.TempPath) + “/” + StringUtils.trim(nomeArquivo);

ObjectOutputStream outputStream = null;

	try {
		outputStream = new ObjectOutputStream(new FileOutputStream(arquivoCompleto));
		outputStream.writeObject(wrapper);
	} catch (IOException e) {
		e.printStackTrace();
	} finally {
		try {
			if (outputStream != null) {
				outputStream.flush();
				outputStream.close();
			}
		} catch (IOException ex) {
			ex.printStackTrace();
		} finally {
			try {
				outputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}[/code]

Finalmente como que eu importo esse arquivo para o sistema, já tentei fazer de diversas vezes, mas sempre encontro o mesmo erro, na mesma linha:

[code]String arquivo = “aaaaa.bin”;

try {

		ObjectInputStream objectIn = null;

		FileInputStream fileInputStream = new FileInputStream(arquivo);
		BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);

		objectIn = new ObjectInputStream(bufferedInputStream); //aqui ocorre o erro

		try {
			Object object = objectIn.readObject();

			ControladoraWrapper wrapper = (ControladoraWrapper) object;

			System.out.println(wrapper);

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}

	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace(); // chega nesta exception.
	}

[/code]

O stack trace é :

java.io.StreamCorruptedException: invalid stream header: FFD8FFE0 at java.io.ObjectInputStream.readStreamHeader(Unknown Source) at java.io.ObjectInputStream.<init>(Unknown Source) // logs da aplicação e do tomcat.

Como eu coloquei, sempre tenho o mesmo erro quando vou nesse new ObjectInputStream(bufferedInputStream). Tem alguma outra forma de eu deserializar o meu objeto? Ou é algo que estou errando na hora de serializar? Fico agradecido desde já.

Acho mais fácil assim:
http://caucho.com/resin-4.0/examples/hessian-serialize/index.xtp

Pela lógica, se você “escreveu” com FileOutputStream, você deve “ler” seu objeto com FileInputStream.

[code]ObjectInputStream objectIn = null;

FileInputStream fileInputStream = new FileInputStream(arquivo);
//BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);

//objectIn = new ObjectInputStream(bufferedInputStream); //aqui ocorre o erro
objectIn = new ObjectInputStream(fileInputStream);[/code]
Acredito que seja isto. Não testei.

Pessoal, valeu muito. O problema foi mais embaixo e bem mais noob.
Observem que eu não fecho os streams de entrada de dados para desserialização.

Que fique a lição dos autos árabes: “se abriu, feche.”

Agora o código ficou assim:

   [code] String arquivo = //bla bla bla...

try {
		FileInputStream fileInputStream = new FileInputStream(arquivo); //abre
		BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream); //abre
		ObjectInputStream objectIn = new ObjectInputStream(bufferedInputStream); //abre

		try {
			Object object = objectIn.readObject();

			wrapper = (ControladoraWrapper) object;

			System.out.println(wrapper);

			fileInputStream.close(); //fecha
			bufferedInputStream.close(); //fecha
			objectIn.close(); //fecha

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}

	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}[/code]

Quando eu fecho os leitores de aquivo, eles também liberam o arquivo para outras operações.