Как сериализовать объект 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 доступно множество учебных пособий по пользовательской сериализации. Информация в этой теме может помочь вам начать:

Использование readObject/writeObject в Сериализации

Если вы попытаетесь получить доступ к файлу в разделе операционной системы (ОС), он выдаст ошибку "Отказано в доступе".

Другие вопросы по тегам