From 82ef2a507ca2a27bf633afb105e5d0f7a8a3fc1c Mon Sep 17 00:00:00 2001 From: mherbaghinyan Date: Wed, 7 Mar 2018 10:28:49 +0400 Subject: [PATCH 1/3] Externalizable test --- .../com/baeldung/externalizable/Country.java | 62 +++++++++++++++++++ .../externalizable/ExternalizableTest.java | 39 ++++++++++++ .../ExternalizableUnitTest.java | 41 ++++++++++++ 3 files changed, 142 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/externalizable/Country.java create mode 100644 core-java/src/main/java/com/baeldung/externalizable/ExternalizableTest.java create mode 100644 core-java/src/test/java/com/baeldung/externalizable/ExternalizableUnitTest.java diff --git a/core-java/src/main/java/com/baeldung/externalizable/Country.java b/core-java/src/main/java/com/baeldung/externalizable/Country.java new file mode 100644 index 000000000000..9fa95002f59d --- /dev/null +++ b/core-java/src/main/java/com/baeldung/externalizable/Country.java @@ -0,0 +1,62 @@ +package com.baeldung.externalizable; + +import java.io.Externalizable; +import java.io.IOException; +import java.io.ObjectInput; +import java.io.ObjectOutput; + +public class Country implements Externalizable { + + private static final long serialVersionUID = 1L; + + private String name; + private String capital; + private int code; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCapital() { + return capital; + } + + public void setCapital(String capital) { + this.capital = capital; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + @Override + public void writeExternal(ObjectOutput out) throws IOException { + out.writeUTF(name); + out.writeUTF(capital); + out.writeInt(code); + } + + @Override + public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { + this.name = in.readUTF(); + this.capital = in.readUTF(); + this.code = in.readInt(); + } + + @Override + public String toString() { + return "Country{" + + "name='" + name + '\'' + + ", capital='" + capital + '\'' + + ", code=" + code + + '}'; + } +} diff --git a/core-java/src/main/java/com/baeldung/externalizable/ExternalizableTest.java b/core-java/src/main/java/com/baeldung/externalizable/ExternalizableTest.java new file mode 100644 index 000000000000..b1622972af02 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/externalizable/ExternalizableTest.java @@ -0,0 +1,39 @@ +package com.baeldung.externalizable; + +import java.io.*; + +//http://programmertech.com/program/java/java-serialization-using-externalizable +//https://java2blog.com/externalizable-in-java/ +//https://howtodoinjava.com/core-java/serialization/externalizable-vs-serializable/ +//http://www.byteslounge.com/tutorials/java-externalizable-example +//http://www.java67.com/2012/10/difference-between-serializable-vs-externalizable-interface.html +public class ExternalizableTest { + + private final static String OUTPUT_FILE = "externalizable.txt"; + + public static void main(String[] args) throws IOException, ClassNotFoundException { + + Country c = new Country(); + c.setCapital("Yerevan"); + c.setCode(374); + c.setName("Armenia"); + + FileOutputStream fileOutputStream = new FileOutputStream(OUTPUT_FILE); + ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); + c.writeExternal(objectOutputStream); + + objectOutputStream.flush(); + objectOutputStream.close(); + fileOutputStream.close(); + + FileInputStream fileInputStream = new FileInputStream(OUTPUT_FILE); + ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); + + Country c2 = new Country(); + c2.readExternal(objectInputStream); + + objectInputStream.close(); + fileInputStream.close(); + } + +} diff --git a/core-java/src/test/java/com/baeldung/externalizable/ExternalizableUnitTest.java b/core-java/src/test/java/com/baeldung/externalizable/ExternalizableUnitTest.java new file mode 100644 index 000000000000..0f32a7471ec0 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/externalizable/ExternalizableUnitTest.java @@ -0,0 +1,41 @@ +package com.baeldung.externalizable; + +import org.junit.Test; + +import java.io.*; + +import static org.junit.Assert.assertTrue; + +public class ExternalizableUnitTest { + + private final static String OUTPUT_FILE = "externalizable.txt"; + + @Test + public void whenSerializing_thenUseExternalizable() throws IOException, ClassNotFoundException { + + Country c = new Country(); + c.setCapital("Yerevan"); + c.setCode(374); + c.setName("Armenia"); + + FileOutputStream fileOutputStream = new FileOutputStream(OUTPUT_FILE); + ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); + c.writeExternal(objectOutputStream); + + objectOutputStream.flush(); + objectOutputStream.close(); + fileOutputStream.close(); + + FileInputStream fileInputStream = new FileInputStream(OUTPUT_FILE); + ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); + + Country c2 = new Country(); + c2.readExternal(objectInputStream); + + objectInputStream.close(); + fileInputStream.close(); + + assertTrue(c2.getCode() == c.getCode()); + assertTrue(c2.getName().equals(c.getName())); + } +} From d325870d4b5fd657eeeb40a8c96a521ca4a164c5 Mon Sep 17 00:00:00 2001 From: mherbaghinyan Date: Sat, 10 Mar 2018 16:20:56 +0400 Subject: [PATCH 2/3] Guide to Externalizable interface +tests --- .../baeldung/externalizable/Community.java | 33 +++++++++++ .../externalizable/ExternalizableTest.java | 39 ------------- .../com/baeldung/externalizable/Region.java | 57 +++++++++++++++++++ .../ExternalizableUnitTest.java | 30 ++++++++++ 4 files changed, 120 insertions(+), 39 deletions(-) create mode 100644 core-java/src/main/java/com/baeldung/externalizable/Community.java delete mode 100644 core-java/src/main/java/com/baeldung/externalizable/ExternalizableTest.java create mode 100644 core-java/src/main/java/com/baeldung/externalizable/Region.java diff --git a/core-java/src/main/java/com/baeldung/externalizable/Community.java b/core-java/src/main/java/com/baeldung/externalizable/Community.java new file mode 100644 index 000000000000..5b599d316d5d --- /dev/null +++ b/core-java/src/main/java/com/baeldung/externalizable/Community.java @@ -0,0 +1,33 @@ +package com.baeldung.externalizable; + +import java.io.*; + +public class Community implements Externalizable { + + private int id; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + @Override + public String toString() { + return "Community{" + + "id=" + id + + '}'; + } + + @Override + public void writeExternal(ObjectOutput out) throws IOException { + + } + + @Override + public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { + + } +} diff --git a/core-java/src/main/java/com/baeldung/externalizable/ExternalizableTest.java b/core-java/src/main/java/com/baeldung/externalizable/ExternalizableTest.java deleted file mode 100644 index b1622972af02..000000000000 --- a/core-java/src/main/java/com/baeldung/externalizable/ExternalizableTest.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.baeldung.externalizable; - -import java.io.*; - -//http://programmertech.com/program/java/java-serialization-using-externalizable -//https://java2blog.com/externalizable-in-java/ -//https://howtodoinjava.com/core-java/serialization/externalizable-vs-serializable/ -//http://www.byteslounge.com/tutorials/java-externalizable-example -//http://www.java67.com/2012/10/difference-between-serializable-vs-externalizable-interface.html -public class ExternalizableTest { - - private final static String OUTPUT_FILE = "externalizable.txt"; - - public static void main(String[] args) throws IOException, ClassNotFoundException { - - Country c = new Country(); - c.setCapital("Yerevan"); - c.setCode(374); - c.setName("Armenia"); - - FileOutputStream fileOutputStream = new FileOutputStream(OUTPUT_FILE); - ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); - c.writeExternal(objectOutputStream); - - objectOutputStream.flush(); - objectOutputStream.close(); - fileOutputStream.close(); - - FileInputStream fileInputStream = new FileInputStream(OUTPUT_FILE); - ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); - - Country c2 = new Country(); - c2.readExternal(objectInputStream); - - objectInputStream.close(); - fileInputStream.close(); - } - -} diff --git a/core-java/src/main/java/com/baeldung/externalizable/Region.java b/core-java/src/main/java/com/baeldung/externalizable/Region.java new file mode 100644 index 000000000000..3ddb694291c8 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/externalizable/Region.java @@ -0,0 +1,57 @@ +package com.baeldung.externalizable; + +import java.io.Externalizable; +import java.io.IOException; +import java.io.ObjectInput; +import java.io.ObjectOutput; + +public class Region extends Country implements Externalizable { + + private static final long serialVersionUID = 1L; + + private String climate; + private Double population; + private Community community; + + public String getClimate() { + return climate; + } + + public void setClimate(String climate) { + this.climate = climate; + } + + public Double getPopulation() { + return population; + } + + public void setPopulation(Double population) { + this.population = population; + } + + @Override + public void writeExternal(ObjectOutput out) throws IOException { + super.writeExternal(out); + out.writeUTF(climate); + community = new Community(); + community.setId(5); + out.writeObject(community); + } + + @Override + public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { + super.readExternal(in); + this.climate = in.readUTF(); + community = (Community) in.readObject(); + } + + @Override + public String toString() { + return "Region = {" + + "country='" + super.toString() + '\'' + + "community='" + community.toString() + '\'' + + "climate='" + climate + '\'' + + ", population=" + population + + '}'; + } +} diff --git a/core-java/src/test/java/com/baeldung/externalizable/ExternalizableUnitTest.java b/core-java/src/test/java/com/baeldung/externalizable/ExternalizableUnitTest.java index 0f32a7471ec0..651364fb131f 100644 --- a/core-java/src/test/java/com/baeldung/externalizable/ExternalizableUnitTest.java +++ b/core-java/src/test/java/com/baeldung/externalizable/ExternalizableUnitTest.java @@ -38,4 +38,34 @@ public void whenSerializing_thenUseExternalizable() throws IOException, ClassNot assertTrue(c2.getCode() == c.getCode()); assertTrue(c2.getName().equals(c.getName())); } + + @Test + public void whenInheritanceSerialization_then_UseExternalizable() throws IOException, ClassNotFoundException { + + Region r = new Region(); + r.setCapital("Yerevan"); + r.setCode(374); + r.setName("Armenia"); + r.setClimate("Mediterranean"); + r.setPopulation(120.000); + + FileOutputStream fileOutputStream = new FileOutputStream(OUTPUT_FILE); + ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); + r.writeExternal(objectOutputStream); + + objectOutputStream.flush(); + objectOutputStream.close(); + fileOutputStream.close(); + + FileInputStream fileInputStream = new FileInputStream(OUTPUT_FILE); + ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); + + Region r2 = new Region(); + r2.readExternal(objectInputStream); + + objectInputStream.close(); + fileInputStream.close(); + + assertTrue(r2.getPopulation() == null); + } } From 1d514c99b5211f81d97f46443d485460130ea51b Mon Sep 17 00:00:00 2001 From: mherbaghinyan Date: Sat, 10 Mar 2018 16:25:30 +0400 Subject: [PATCH 3/3] serialize Community --- .../java/com/baeldung/externalizable/Community.java | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/core-java/src/main/java/com/baeldung/externalizable/Community.java b/core-java/src/main/java/com/baeldung/externalizable/Community.java index 5b599d316d5d..bdbec9f547d8 100644 --- a/core-java/src/main/java/com/baeldung/externalizable/Community.java +++ b/core-java/src/main/java/com/baeldung/externalizable/Community.java @@ -2,7 +2,7 @@ import java.io.*; -public class Community implements Externalizable { +public class Community implements Serializable { private int id; @@ -20,14 +20,4 @@ public String toString() { "id=" + id + '}'; } - - @Override - public void writeExternal(ObjectOutput out) throws IOException { - - } - - @Override - public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { - - } }