Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions libraries/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -544,6 +544,11 @@
<artifactId>byte-buddy-agent</artifactId>
<version>${bytebuddy.version}</version>
</dependency>
<dependency>
<groupId>com.esotericsoftware</groupId>
<artifactId>kryo</artifactId>
<version>${kryo.version}</version>
</dependency>
</dependencies>
<properties>
<multiverse.version>0.7.0</multiverse.version>
Expand Down Expand Up @@ -587,6 +592,7 @@
<!-- /Vaadin -->
<hll.version>1.6.0</hll.version>
<bytebuddy.version>1.7.1</bytebuddy.version>
<kryo.version>4.0.1</kryo.version>
</properties>
<profiles>
<!-- Vaadin -->
Expand Down
18 changes: 18 additions & 0 deletions libraries/src/main/java/com/baeldung/kryo/ComplexClass.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.baeldung.kryo;

import java.io.Serializable;

public class ComplexClass implements Serializable{
private static final long serialVersionUID = 123456L;
private String name = "Bael";

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}


}
54 changes: 54 additions & 0 deletions libraries/src/main/java/com/baeldung/kryo/Person.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.baeldung.kryo;

import com.esotericsoftware.kryo.DefaultSerializer;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.KryoSerializable;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
import java.util.Date;

@DefaultSerializer(PersonSerializer.class)
public class Person implements KryoSerializable {
private String name = "John Doe";
private int age = 18;
private Date birthDate = new Date(933191282821L);

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public Date getBirthDate() {
return birthDate;
}

public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
}

@Override
public void write(Kryo kryo, Output output) {
output.writeString(name);
output.writeLong(birthDate.getTime());
output.writeInt(age);
}

@Override
public void read(Kryo kryo, Input input) {
name = input.readString();
birthDate = new Date(input.readLong());
age = input.readInt();
}

}
33 changes: 33 additions & 0 deletions libraries/src/main/java/com/baeldung/kryo/PersonSerializer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.baeldung.kryo;

import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.Serializer;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
import java.util.Date;

public class PersonSerializer extends Serializer<Person> {

@Override
public void write(Kryo kryo, Output output, Person object) {
output.writeString(object.getName());
output.writeLong(object.getBirthDate()
.getTime());
}

@Override
public Person read(Kryo kryo, Input input, Class<Person> type) {
Person person = new Person();
person.setName(input.readString());
long birthDate = input.readLong();
person.setBirthDate(new Date(birthDate));
person.setAge(calculateAge(birthDate));
return person;
}

private int calculateAge(long birthDate) {
// Some custom logic
return 18;
}

}
125 changes: 125 additions & 0 deletions libraries/src/test/java/com/baeldung/kryo/KryoUnitTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
package com.baeldung.kryo;

import static org.junit.Assert.assertEquals;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.junit.Before;
import org.junit.Test;

import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
import com.esotericsoftware.kryo.serializers.JavaSerializer;

public class KryoUnitTest {

private Kryo kryo;
private Output output;
private Input input;

@Before
public void init() {
kryo = new Kryo();
try {
output = new Output(new FileOutputStream("file.dat"));
input = new Input(new FileInputStream("file.dat"));
} catch (FileNotFoundException ex) {
Logger.getLogger(KryoUnitTest.class.getName())
.log(Level.SEVERE, null, ex);
}
}

@Test
public void givenObject_whenSerializing_thenReadCorrectly() {
Object someObject = "Some string";

kryo.writeClassAndObject(output, someObject);
output.close();

Object theObject = kryo.readClassAndObject(input);
input.close();

assertEquals(theObject, "Some string");
}

@Test
public void givenObjects_whenSerializing_thenReadCorrectly() {
String someString = "Multiple Objects";
Date someDate = new Date(915170400000L);

kryo.writeObject(output, someString);
kryo.writeObject(output, someDate);
output.close();

String readString = kryo.readObject(input, String.class);
Date readDate = kryo.readObject(input, Date.class);
input.close();

assertEquals(readString, "Multiple Objects");
assertEquals(readDate.getTime(), 915170400000L);
}

@Test
public void givenPerson_whenSerializing_thenReadCorrectly() {
Person person = new Person();

kryo.writeObject(output, person);
output.close();

Person readPerson = kryo.readObject(input, Person.class);
input.close();

assertEquals(readPerson.getName(), "John Doe");
}

@Test
public void givenPerson_whenUsingCustomSerializer_thenReadCorrectly() {
Person person = new Person();
person.setAge(0);
kryo.register(Person.class, new PersonSerializer());

kryo.writeObject(output, person);
output.close();

Person readPerson = kryo.readObject(input, Person.class);
input.close();

assertEquals(readPerson.getName(), "John Doe");
assertEquals(readPerson.getAge(), 18);
}

@Test
public void givenPerson_whenCustomSerialization_thenReadCorrectly() {
Person person = new Person();

kryo.writeObject(output, person);
output.close();

Person readPerson = kryo.readObject(input, Person.class);
input.close();

assertEquals(readPerson.getName(), "John Doe");
assertEquals(readPerson.getAge(), 18);
}

@Test
public void givenJavaSerializable_whenSerializing_thenReadCorrectly() {
ComplexClass complexClass = new ComplexClass();
kryo.register(ComplexClass.class, new JavaSerializer());

kryo.writeObject(output, complexClass);
output.close();

ComplexClass readComplexObject = kryo.readObject(input, ComplexClass.class);
input.close();

assertEquals(readComplexObject.getName(), "Bael");
}

}