-
-
Notifications
You must be signed in to change notification settings - Fork 841
Closed
Labels
Description
Describe the bug
java.sql.Timestamp supports nanosecond precision, but data is truncated to milliseconds after being serialised and deserialised.
To Reproduce
import static org.assertj.core.api.Assertions.assertThat;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.sql.Timestamp;
import java.time.Instant;
import org.junit.jupiter.api.Test;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
class KryoTimestampTest {
@Test
void timestampRoundtrip() {
var k = new Kryo();
k.setRegistrationRequired(false);
var bytes = new ByteArrayOutputStream();
var originalTimestamp = new Timestamp(Instant.parse("2022-03-16T17:03:05Z").toEpochMilli());
originalTimestamp.setNanos(123456789);
assertThat(originalTimestamp.toInstant()).isEqualTo(Instant.parse("2022-03-16T17:03:05.123456789Z"));
try(var out = new Output(bytes)) {
k.writeClassAndObject(out, originalTimestamp);
}
try(var in = new Input(new ByteArrayInputStream(bytes.toByteArray()))) {
var deserialisedTimestamp = (Timestamp) k.readClassAndObject(in);
assertThat(deserialisedTimestamp.toInstant()).isEqualTo(Instant.parse("2022-03-16T17:03:05.123456789Z"));
}
}
}Environment:
- OS: Debian
- JDK Version: 17.0.2
- Kryo Version: 5.3.0
Additional context
None