Я пытаюсь клонировать объект, 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;
}
Действительно, это вызывает ошибку, связанную с сериализацией. Я использовал фиктивный объект внутри класса Bank для модульного тестирования. Это решено.
Ваш код генерирует исключение «NotSerializable», ваш класс Bank НЕОБХОДИМ для реализации Serializable
если с зависимостями все в порядке, GSON может сделать это довольно легко
Есть ли исключения? Кстати, печатать только сообщение об исключении - не очень хорошая идея, так как вы потеряете трассировку стека. В этом случае вам будет трудно определить, возникает ли исключение при записи или чтении потока.