Как сериализовать объект Java - преобразование объекта в InputStream
Если я напишу свой код, как это, он выдаст ошибку "Файл не найден, доступ запрещен......"
public class ImplRegistration implements IRegistration {
@Override
public boolean newRegistration(Registration_BE reg_be) {
FileOutputStream fos = new FileOutputStream("serial.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(reg_be);
}
}
Из соображений безопасности я изменил четвертую строку кода следующим образом:
FileOutputStream fos = new FileOutputStream("f://serial.ser");
Но тогда это показало исключение java.io.NotSerializableException: java.io.ByteArrayInputStream
,
Как я могу сериализовать объект?
2 ответа
Операция сериализации в этом случае терпит неудачу, потому что, как заявляет Тед Хопп в комментариях выше, класс, который вы пытаетесь сериализовать, содержит непереходный (и не сериализуемый) объект ByteArrayInputStream. Чтобы исправить это и сделать сериализуемый класс Registration_BE, вы можете пометить это поле как временное:
class Registration_BE {
// rest of class
private transient ByteArrayInputStream bais = null;
// rest of class
}
Это приведет к тому, что он будет исключен из процесса сериализации Registration_BE, но также приведет к его неинициализации при десериализации объекта на другом конце.
Если вы хотите инициализировать ByteArrayInputStream после десериализации, вы можете рассмотреть возможность написания пользовательских методов writeObject / readObject для класса Registration_BE. В Google доступно множество учебных пособий по пользовательской сериализации. Информация в этой теме может помочь вам начать:
Если вы попытаетесь получить доступ к файлу в разделе операционной системы (ОС), он выдаст ошибку "Отказано в доступе".