привет Я Learing сериализацию объектов и попытался этоСериализация объектов Java, Не удалось закрыть ObjectOutputStream?
import java.io.*;
class Employee implements Serializable{
Employee(int temp_id,String temp_name)
{
id=temp_id;
name=temp_name;
}
int id;
String name;
}
public class SerialTest{
public static void main(String[] args)
{
Employee e1=new Employee(14,"John");
try{
FileOutputStream fileStream=new FileOutputStream("myserial.ser");
ObjectOutputStream os=new ObjectOutputStream(fileStream);
os.writeObject(e1);
}
catch(IOException ioex)
{
ioex.printStackTrace();
}
finally{
os.close();
}
}//main ends
}//class ends
Программа работала, прежде чем я положил в вызове
os.close();
Теперь я не компилирует, я получаю ошибку говоря
SerialTest.java:29: cannot find symbol
symbol : variable os
location: class SerialTest
os.close();
^
Работало до того, как я попытался закрыть ObjectOutPutStream, содержание сериализованного файла приведено ниже,
¬í^@^Esr^@^HEmployee^S < 89> S§ ± < 9b> éØ^B^@^BI^@^BidL^@^Dnamet^@^RLjava/lang/String; xp^@^@^@^Nt^@^GSainath ~
Я не могу понять, где я иду не так, пожалуйста, помогите!
Вы должны прочитать о том, что * переменная сфера * есть. Также проверьте try-with-resources. – Pshemo
ой! , являются ли объекты в try {// объявлении объекта} ограниченным в блоке try? –
Вы на 99% правильны, потому что это не объекты, которые ограничены областью, но переменными (ссылками). Из-за этого вам нужно создать ссылку перед блоками 'try', если вы хотите использовать ее вне' try' (например, в 'catch' или' finally'). Вы можете установить эту ссылку на «null» и изменить ее значение в 'try'. Вы можете позволить компилятору обрабатывать его автоматически, используя [try-with-resources] (http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html) – Pshemo