Serialização [RESOLVIDO]

Galera bom dia a todos!!!

Bom eu tenho os seguintes métodos de serialização e deserialização eu queria saber somente a questão da string para o construtor ou seja se essa string que cria um canal especifico para alocar (gravar) o objeto.

[code]public void serializacao() throws IOException, ClassNotFoundException{

	FileOutputStream fos = new FileOutputStream("canal"); // essa string aqui.
	
	ObjectOutputStream oos = new ObjectOutputStream(fos);
	
	oos.writeObject(this.file);
	
	oos.close();

} // fim do método de serializacao


public void desserializaçao() throws IOException, ClassNotFoundException{
	
                            FileInputStream fis = new FileInputStream("canal"); // por exemplo se eu tiver nome diferente aqui da string passada no FileOutputStream acontece algo? Pq fiz teste aqui com strings diferentes serializou do mesmo jeito.
	
	ObjectInputStream ois = new ObjectInputStream(fis);
	
	this.file = (File) ois.readObject();
	
	ois.close();
	
	} // fim do método de desserializaçao[/code]

Você já ouviu falar em arquivos?

“canal” é o nome do arquivo.

Olhe a documentação, por favor.

http://java.sun.com/javase/6/docs/api/java/io/FileOutputStream.html

ta mas que arquivo é esse cara isso que eu quero entender, ele passa o nome de um arquivo para a variavel de referencia?

Quando voce serializa voce cria um arquivo por exemplo obj.bruno no padrão da serialização.

Everton, quando vc faz:

new FileOutputStream("canal");

Vc está está criando uma stream ed saída para gravar um arquivo com este nome, porém, este nome não é o arquivo, é o nome que vai ser gravado o arquivo.

O arquivo que vc vai gravar através deste stream é o this.file.

oos.writeObject(this.file); 

FKw

Olá Everton, bom dia…

Talvez uma lida nesse blog possa ajuda a esclarecer melhor…

http://camilolopes.wordpress.com/2008/06/04/serializacao-em-java/

O parâmetro passado para o FileOutputStream é o nome do arquivo (um arquivo mesmo, presente no sistema de arquivos; por exemplo c:/arquivo.dat ou /home/fulano/arquivo.dat).

Depois, para método writeObject() você vai informar qual objeto você irá serializar (por exemplo, um JFrame).

Um exemplo:

		// objeto que será serializado
		JFrame frame = new JFrame();
		frame.add(new JLabel("Olá mundo!"));
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.pack();
		frame.setLocationRelativeTo(null);

		// serialização
		FileOutputStream fileOutputStream = new FileOutputStream("frame.dat");
		ObjectOutputStream objectOutputStream = new ObjectOutputStream(
				fileOutputStream);
		objectOutputStream.writeObject(frame);
		objectOutputStream.close();

		// agora vamos zerar a referência da variável frame
		frame = null;

		// e fazer a desserialização para este mesmo objeto
		FileInputStream fileInputStream = new FileInputStream("frame.dat");
		ObjectInputStream objectInputStream = new ObjectInputStream(
				fileInputStream);
		frame = (JFrame) objectInputStream.readObject();
		objectInputStream.close();

		// para testar, vamos mostrar o JFrame que foi serializado e
		// desserializado
		frame.setVisible(true);
FileOutputStream fileOutputStream = new FileOutputStream("teste.ser");  // Ok ele crio um arquivo teste.ser 
FileInputStream fileInputStream = new FileInputStream("teste2.ser"); // Aqui com nome diferente, como o objeto foi salvo no arquivo teste, ele vai tentar deserializa um objeto em um arquivo diferente  e ira me gerar um ClassNotFoundExcpetion correto?  

Pelo que eu entendi então ele grava o estado do objeto no arquivo correto? Agora quanto a extensao do arquivo pode ser qualqur uma ou ate mesmo nao ter extensao?

A extensão pode ser qualquer uma: .ser, .dat, .seilaoque

Porém na hora de de desserializar, você deve usar o mesmo nome e extensão que usou na hora de serializar.

marco brigadao cara, mas entao e isso mesmo ele grava o estado do objeto no arquivo né, muito obrigado pela ajuda.

Não grava só o estado, mas sim o objeto inteiro, com todos os seus dados e propriedades.