From 47a97d3177a62c233ff5b70446a479ef66103a05 Mon Sep 17 00:00:00 2001 From: Yasser Afifi Date: Sun, 14 May 2017 16:39:23 +0100 Subject: [PATCH] serialization code (#1844) * adds serialization code * fixes serialization unit test * adds code for custom serialization * changed test case names * fixes test names --- .../com/baeldung/serialization/Address.java | 15 +++++++ .../com/baeldung/serialization/Employee.java | 44 +++++++++++++++++++ .../baeldung/serialization/PersonTest.java | 33 +++++++++++++- 3 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 core-java/src/main/java/com/baeldung/serialization/Address.java create mode 100644 core-java/src/main/java/com/baeldung/serialization/Employee.java diff --git a/core-java/src/main/java/com/baeldung/serialization/Address.java b/core-java/src/main/java/com/baeldung/serialization/Address.java new file mode 100644 index 0000000000..524ecb1ffc --- /dev/null +++ b/core-java/src/main/java/com/baeldung/serialization/Address.java @@ -0,0 +1,15 @@ +package com.baeuldung.serialization; + +public class Address { + + private int houseNumber; + + public int getHouseNumber() { + return houseNumber; + } + + public void setHouseNumber(int houseNumber) { + this.houseNumber = houseNumber; + } + +} diff --git a/core-java/src/main/java/com/baeldung/serialization/Employee.java b/core-java/src/main/java/com/baeldung/serialization/Employee.java new file mode 100644 index 0000000000..69beeb0b49 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/serialization/Employee.java @@ -0,0 +1,44 @@ +package com.baeuldung.serialization; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; + +public class Employee implements Serializable { + + private static final long serialVersionUID = 1L; + + private transient Address address; // not an serializable object + private Person person; + + public Address getAddress() { + return address; + } + + public void setAddress(Address address) { + this.address = address; + } + + public Person getPerson() { + return person; + } + + public void setPerson(Person person) { + this.person = person; + } + + private void writeObject(ObjectOutputStream oos) throws IOException { + oos.defaultWriteObject(); + oos.writeObject(address.getHouseNumber()); + } + + private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException { + ois.defaultReadObject(); + Integer houseNumber = (Integer) ois.readObject(); + Address a = new Address(); + a.setHouseNumber(houseNumber); + this.setAddress(a); + } + +} diff --git a/core-java/src/test/java/com/baeldung/serialization/PersonTest.java b/core-java/src/test/java/com/baeldung/serialization/PersonTest.java index 57da945e62..d07fb08a67 100644 --- a/core-java/src/test/java/com/baeldung/serialization/PersonTest.java +++ b/core-java/src/test/java/com/baeldung/serialization/PersonTest.java @@ -1,5 +1,5 @@ package com.baeuldung.serialization; -import static org.junit.Assert.assertEquals; + import static org.junit.Assert.assertTrue; import java.io.FileInputStream; @@ -13,7 +13,7 @@ import org.junit.Test; public class PersonTest { @Test - public void testPeron() throws IOException, ClassNotFoundException { + public void whenSerializingAndDeserializing_ThenObjectIsTheSame() throws IOException, ClassNotFoundException { Person p = new Person(); p.setAge(20); p.setName("Joe"); @@ -28,8 +28,37 @@ public class PersonTest { ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); Person p2 = (Person) objectInputStream.readObject(); objectInputStream.close(); + assertTrue(p2.getAge() == p.getAge()); assertTrue(p2.getName().equals(p.getName())); } + @Test + public void whenCustomSerializingAndDeserializing_ThenObjectIsTheSame() throws IOException, ClassNotFoundException { + Person p = new Person(); + p.setAge(20); + p.setName("Joe"); + + Address a = new Address(); + a.setHouseNumber(1); + + Employee e = new Employee(); + e.setPerson(p); + e.setAddress(a); + + FileOutputStream fileOutputStream = new FileOutputStream("yofile2.txt"); + ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); + objectOutputStream.writeObject(e); + objectOutputStream.flush(); + objectOutputStream.close(); + + FileInputStream fileInputStream = new FileInputStream("yofile2.txt"); + ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); + Employee e2 = (Employee) objectInputStream.readObject(); + objectInputStream.close(); + + assertTrue(e2.getPerson().getAge() == e.getPerson().getAge()); + assertTrue(e2.getAddress().getHouseNumber() == (e.getAddress().getHouseNumber())); + } + }