From 7688e480f41af8e5ac055064664182ecc91375e5 Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Mon, 24 Jul 2023 15:37:32 +0200 Subject: [PATCH] add json file data deserializer for memory efficient json parsing --- kop-common-lib/pom.xml | 8 +++++ .../binaryfile/FileDataDeserializer.java | 33 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 kop-common-lib/src/main/java/de/itvsh/kop/common/binaryfile/FileDataDeserializer.java diff --git a/kop-common-lib/pom.xml b/kop-common-lib/pom.xml index 408d548..ae3cff9 100644 --- a/kop-common-lib/pom.xml +++ b/kop-common-lib/pom.xml @@ -95,6 +95,14 @@ <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-core</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-databind</artifactId> + </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> diff --git a/kop-common-lib/src/main/java/de/itvsh/kop/common/binaryfile/FileDataDeserializer.java b/kop-common-lib/src/main/java/de/itvsh/kop/common/binaryfile/FileDataDeserializer.java new file mode 100644 index 0000000..3b5405f --- /dev/null +++ b/kop-common-lib/src/main/java/de/itvsh/kop/common/binaryfile/FileDataDeserializer.java @@ -0,0 +1,33 @@ +package de.itvsh.kop.common.binaryfile; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; + +import lombok.SneakyThrows; + +public class FileDataDeserializer extends StdDeserializer<File> { + + protected FileDataDeserializer() { + super(File.class); + } + + @SneakyThrows + @Override + public File deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JacksonException { + var tempFile = TempFileUtils.createTmpFile(); + + try (var out = new FileOutputStream(tempFile.toFile())) { + p.readBinaryValue(out); + out.flush(); + } + + return tempFile.toFile(); + } + +} -- GitLab