Как клонировать объект, скопировав ByteArrayOutputStream в ByteArray, а затем вызвать его ByteArrayInputStream?

Я пытаюсь клонировать объект, 1) помещая его в ByteArrayOutputStream 2) назначая поток массиву байтов 3) считывая массив байтов с помощью ByteArrayInputStream. Однако это не сработает, так как я не могу назначить OutputStream массиву байтов, строка просто не будет выполняться.

Подход основан на Сериализуемый объект Java в байтовый массив

public Bank clone() {
        Bank objektKopie = null;
        byte[] byteKopie = null;
        ByteArrayOutputStream bo = new ByteArrayOutputStream();
        ObjectOutputStream oo = null;
        try {
            bo = new ByteArrayOutputStream();
            oo = new ObjectOutputStream(bo);
            oo.writeObject(this);
            oo.flush() ;
            byteKopie = bo.toByteArray(); // THIS WILL NOT HAPPEN
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } finally {
            try {
               bo.close();
            } catch (IOException e) {
                System.out.println(e.getMessage());
            }
        }
        ByteArrayInputStream bi = new ByteArrayInputStream(byteKopie); // byteKopie IS STILL NULL
        ObjectInputStream oi = null;
        try {
            oi = new ObjectInputStream(bi);
            objektKopie = (Bank) oi.readObject();
        } catch (Exception e) { System.out.println(e.getMessage()); }
        return objektKopie;
    }

Есть ли исключения? Кстати, печатать только сообщение об исключении - не очень хорошая идея, так как вы потеряете трассировку стека. В этом случае вам будет трудно определить, возникает ли исключение при записи или чтении потока.

Jayr 29.05.2019 17:48

Действительно, это вызывает ошибку, связанную с сериализацией. Я использовал фиктивный объект внутри класса Bank для модульного тестирования. Это решено.

Leonardo 30.05.2019 09:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
396
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ваш код генерирует исключение «NotSerializable», ваш класс Bank НЕОБХОДИМ для реализации Serializable

если с зависимостями все в порядке, GSON может сделать это довольно легко

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