cake
#1
O livro dá o seguinte exemplo:
[code]public static void main(String[] args)
{
Box myBox = new Box();
try
{
FileOutputStream fs = new FileOutputStream(“foo.ser”);
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(myBox);
os.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}[/code]
E o fs.close? Não precisa?
Por que?
Você pode incluir o fs.flush() e fs.close() sem problemas.
A questão dos livros é que cada autor coloca o que acha relevante…
Não é obrigatório porque o método close() de ObjectOutputStream (os) já invoca o método close() do OutputStream (fs) carregado pelo construtor.
Só uma dica: é interessante colocar a chamada para o método close em um bloco finally, assim terá certeza que o os será fechado.
cake
#4
[code]public static void main(String[] args)
{
Box myBox = new Box();
try
{
FileOutputStream fs = new FileOutputStream(“foo.ser”);
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(myBox);
}
catch(Exception ex)
{
ex.printStackTrace();
}
finally
{
os.close();
}
} [/code]
Isso era pra funcionar?
Aqui dá erro… :?
As variáveis criadas dentro de um bloco, existem apenas dentro deste bloco. É o caso de os, que está sendo criado no bloco do try.
[code]public static void main(String[] args)
{
Box myBox = new Box();
ObjectOutputStream os = null; //Agora “os” existirá em qualquer parte do método main
try
{
FileOutputStream fs = new FileOutputStream(“foo.ser”);
os = new ObjectOutputStream(fs);
os.writeObject(myBox);
}
catch(Exception ex)
{
ex.printStackTrace();
}
finally {
if (os != null)
try { os.close(); }
catch (IOException ex) { }
}
} [/code]
Um post acima tem o exemplo.
O os.close() deve estar em um bloco try/catch, pois ele declara IOException. Copiei e colei o código e acabei nem percebendo.
finally {
if (os != null)
try { os.close(); }
catch (IOException ex) { }
}
Edit: Arrumei o exemplo lá em cima também.
cake
#11
Então se a Exception for lançada no construtor do ObjectOutputStream, FileOutputStream ficará aberto?
Imagino que sim. Do jeito que está, quem chama o close de fs é o método close de os. Por isso não custa nada fechar tudo na mão mesmo.