Review comments updated
Review comments updated
This commit is contained in:
parent
82026b3fff
commit
47ca31189a
@ -0,0 +1,44 @@
|
|||||||
|
package com.baeldung.util;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.ObjectInputStream;
|
||||||
|
import java.io.ObjectOutputStream;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.Modifier;
|
||||||
|
|
||||||
|
public class MySerializationUtils {
|
||||||
|
|
||||||
|
public static <T extends Serializable> byte[] serialize(T obj) throws IOException {
|
||||||
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
ObjectOutputStream oos = new ObjectOutputStream(baos);
|
||||||
|
oos.writeObject(obj);
|
||||||
|
oos.close();
|
||||||
|
return baos.toByteArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T extends Serializable> T deserialize(byte[] b, Class<T> cl) throws IOException, ClassNotFoundException {
|
||||||
|
ByteArrayInputStream bais = new ByteArrayInputStream(b);
|
||||||
|
ObjectInputStream ois = new ObjectInputStream(bais);
|
||||||
|
Object o = ois.readObject();
|
||||||
|
return cl.cast(o);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isSerializable(Class<?> it) {
|
||||||
|
boolean serializable = it.isPrimitive() || it.isInterface() || Serializable.class.isAssignableFrom(it);
|
||||||
|
if (!serializable) {
|
||||||
|
return serializable;
|
||||||
|
}
|
||||||
|
Field[] declaredFields = it.getDeclaredFields();
|
||||||
|
for (Field field : declaredFields) {
|
||||||
|
if (Modifier.isVolatile(field.getModifiers()) || Modifier.isTransient(field.getModifiers()) || Modifier.isStatic(field.getModifiers())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Class<?> fieldType = field.getType();
|
||||||
|
return isSerializable(fieldType);
|
||||||
|
}
|
||||||
|
return serializable;
|
||||||
|
}
|
||||||
|
}
|
@ -1,47 +0,0 @@
|
|||||||
package com.baeldung.util;
|
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.ObjectInputStream;
|
|
||||||
import java.io.ObjectOutputStream;
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.lang.reflect.Modifier;
|
|
||||||
|
|
||||||
public class SerializationUtils {
|
|
||||||
|
|
||||||
public static <T extends Serializable> byte[] serialize(T obj) throws IOException {
|
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
||||||
ObjectOutputStream oos = new ObjectOutputStream(baos);
|
|
||||||
oos.writeObject(obj);
|
|
||||||
oos.close();
|
|
||||||
return baos.toByteArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static <T extends Serializable> T deserialize(byte[] b, Class<T> cl)
|
|
||||||
throws IOException, ClassNotFoundException {
|
|
||||||
ByteArrayInputStream bais = new ByteArrayInputStream(b);
|
|
||||||
ObjectInputStream ois = new ObjectInputStream(bais);
|
|
||||||
Object o = ois.readObject();
|
|
||||||
return cl.cast(o);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isSerializable(Class<?> it) {
|
|
||||||
boolean serializable = it.isPrimitive() || it.isInterface() || Serializable.class.isAssignableFrom(it);
|
|
||||||
if (!serializable) {
|
|
||||||
return serializable;
|
|
||||||
}
|
|
||||||
Field[] declaredFields = it.getDeclaredFields();
|
|
||||||
for (Field field : declaredFields) {
|
|
||||||
if (Modifier.isVolatile(field.getModifiers())
|
|
||||||
|| Modifier.isTransient(field.getModifiers())
|
|
||||||
|| Modifier.isStatic(field.getModifiers())) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
Class<?> fieldType = field.getType();
|
|
||||||
return isSerializable(fieldType);
|
|
||||||
}
|
|
||||||
return serializable;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +1,8 @@
|
|||||||
package com.baeldung.serialization;
|
package com.baeldung.serialization;
|
||||||
|
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
@ -38,10 +39,10 @@ public class SerializationUnitTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
FileInputStream fileInputStream = new FileInputStream("yofile.txt");
|
FileInputStream fileInputStream = new FileInputStream("yofile.txt");
|
||||||
try ( ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream)) {
|
try (ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream)) {
|
||||||
Person p2 = (Person) objectInputStream.readObject();
|
Person p2 = (Person) objectInputStream.readObject();
|
||||||
assertTrue(p2.getAge() == p.getAge());
|
assertEquals(p2.getAge(), p.getAge());
|
||||||
assertTrue(p2.getName().equals(p.getName()));
|
assertEquals(p2.getName(), p.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,8 +60,8 @@ public class SerializationUnitTest {
|
|||||||
p.setName("Joe");
|
p.setName("Joe");
|
||||||
byte[] serialize = SerializationUtils.serialize(p);
|
byte[] serialize = SerializationUtils.serialize(p);
|
||||||
Person p2 = (Person) SerializationUtils.deserialize(serialize);
|
Person p2 = (Person) SerializationUtils.deserialize(serialize);
|
||||||
assertTrue(p2.getAge() == p.getAge());
|
assertEquals(p2.getAge(), p.getAge());
|
||||||
assertTrue(p2.getName().equals(p.getName()));
|
assertEquals(p2.getName(), p.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = ClassCastException.class)
|
@Test(expected = ClassCastException.class)
|
||||||
@ -77,33 +78,32 @@ public class SerializationUnitTest {
|
|||||||
p.setName("Joe");
|
p.setName("Joe");
|
||||||
byte[] serialize = org.springframework.util.SerializationUtils.serialize(p);
|
byte[] serialize = org.springframework.util.SerializationUtils.serialize(p);
|
||||||
Person p2 = (Person) org.springframework.util.SerializationUtils.deserialize(serialize);
|
Person p2 = (Person) org.springframework.util.SerializationUtils.deserialize(serialize);
|
||||||
assertTrue(p2.getAge() == p.getAge());
|
assertEquals(p2.getAge(), p.getAge());
|
||||||
assertTrue(p2.getName().equals(p.getName()));
|
assertEquals(p2.getName(), p.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = ClassCastException.class)
|
@Test(expected = ClassCastException.class)
|
||||||
public void whenSerializingUsingCustomSerializationUtils_ThenThrowsError() throws IOException {
|
public void whenSerializingUsingCustomSerializationUtils_ThenThrowsError() throws IOException {
|
||||||
Address address = new Address();
|
Address address = new Address();
|
||||||
address.setHouseNumber(10);
|
address.setHouseNumber(10);
|
||||||
com.baeldung.util.SerializationUtils.serialize((Serializable) address);
|
com.baeldung.util.MySerializationUtils.serialize((Serializable) address);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void whenSerializingAndDeserializingUsingCustomSerializationUtils_ThenObjectIsTheSame()
|
public void whenSerializingAndDeserializingUsingCustomSerializationUtils_ThenObjectIsTheSame() throws IOException, ClassNotFoundException {
|
||||||
throws IOException, ClassNotFoundException {
|
|
||||||
Person p = new Person();
|
Person p = new Person();
|
||||||
p.setAge(20);
|
p.setAge(20);
|
||||||
p.setName("Joe");
|
p.setName("Joe");
|
||||||
byte[] serialize = com.baeldung.util.SerializationUtils.serialize(p);
|
byte[] serialize = com.baeldung.util.MySerializationUtils.serialize(p);
|
||||||
Person p2 = com.baeldung.util.SerializationUtils.deserialize(serialize, Person.class);
|
Person p2 = com.baeldung.util.MySerializationUtils.deserialize(serialize, Person.class);
|
||||||
assertTrue(p2.getAge() == p.getAge());
|
assertEquals(p2.getAge(), p.getAge());
|
||||||
assertTrue(p2.getName().equals(p.getName()));
|
assertEquals(p2.getName(), p.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void whenSerializingUsingCustomSerializationUtils_ThanOk() {
|
public void whenSerializingUsingCustomSerializationUtils_ThanOk() {
|
||||||
assertFalse(com.baeldung.util.SerializationUtils.isSerializable(Address.class));
|
assertFalse(com.baeldung.util.MySerializationUtils.isSerializable(Address.class));
|
||||||
assertTrue(com.baeldung.util.SerializationUtils.isSerializable(Person.class));
|
assertTrue(com.baeldung.util.MySerializationUtils.isSerializable(Person.class));
|
||||||
assertTrue(com.baeldung.util.SerializationUtils.isSerializable(Integer.class));
|
assertTrue(com.baeldung.util.MySerializationUtils.isSerializable(Integer.class));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user