Objects: move serializer stuff a little

This commit is contained in:
2025-03-14 22:31:45 +01:00
parent 223ba20418
commit 0aca2c5dbb
3 changed files with 50 additions and 25 deletions

View File

@@ -1,16 +1,17 @@
package com.usatiuk.dhfs.objects;
import com.google.protobuf.ByteString;
import com.usatiuk.dhfs.utils.SerializationHelper;
import java.util.function.Supplier;
public class JDataVersionedWrapperLazy implements JDataVersionedWrapper {
private final long _version;
private ByteString _rawData;
private final int _estimatedSize;
private Supplier<JData> _producer;
private JData _data;
public JDataVersionedWrapperLazy(long version, ByteString rawData) {
public JDataVersionedWrapperLazy(long version, int estimatedSize, Supplier<JData> producer) {
_version = version;
_rawData = rawData;
_estimatedSize = estimatedSize;
_producer = producer;
}
public JData data() {
@@ -21,12 +22,8 @@ public class JDataVersionedWrapperLazy implements JDataVersionedWrapper {
if (_data != null)
return _data;
try (var is = _rawData.newInput()) {
_data = SerializationHelper.deserialize(is);
} catch (Exception e) {
throw new RuntimeException(e);
}
_rawData = null;
_data = _producer.get();
_producer = null;
return _data;
}
}
@@ -37,8 +34,6 @@ public class JDataVersionedWrapperLazy implements JDataVersionedWrapper {
@Override
public int estimateSize() {
if (_data != null)
return _data.estimateSize();
return _rawData.size();
return _estimatedSize;
}
}

View File

@@ -0,0 +1,29 @@
package com.usatiuk.dhfs.objects;
import com.google.protobuf.ByteString;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import java.nio.ByteBuffer;
@ApplicationScoped
public class JDataVersionedWrapperSerializer implements ObjectSerializer<JDataVersionedWrapper> {
@Inject
ObjectSerializer<JData> dataSerializer;
@Override
public ByteString serialize(JDataVersionedWrapper obj) {
ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
buffer.putLong(obj.version());
buffer.flip();
return ByteString.copyFrom(buffer).concat(dataSerializer.serialize(obj.data()));
}
@Override
public JDataVersionedWrapper deserialize(ByteString data) {
var version = data.substring(0, Long.BYTES).asReadOnlyByteBuffer().getLong();
var rawData = data.substring(Long.BYTES);
return new JDataVersionedWrapperLazy(version, rawData.size(), () -> dataSerializer.deserialize(rawData));
}
}

View File

@@ -3,24 +3,25 @@ package com.usatiuk.dhfs.objects;
import com.google.protobuf.ByteString;
import com.usatiuk.dhfs.utils.SerializationHelper;
import io.quarkus.arc.DefaultBean;
import jakarta.enterprise.context.ApplicationScoped;
import java.nio.ByteBuffer;
import java.io.IOException;
@ApplicationScoped
public class JavaDataSerializer implements ObjectSerializer<JDataVersionedWrapper> {
@DefaultBean
public class JavaDataSerializer implements ObjectSerializer<JData> {
@Override
public ByteString serialize(JDataVersionedWrapper obj) {
ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
buffer.putLong(obj.version());
buffer.flip();
return ByteString.copyFrom(buffer).concat(SerializationHelper.serialize(obj.data()));
public ByteString serialize(JData obj) {
return SerializationHelper.serialize(obj);
}
@Override
public JDataVersionedWrapper deserialize(ByteString data) {
var version = data.substring(0, Long.BYTES).asReadOnlyByteBuffer().getLong();
var rawData = data.substring(Long.BYTES);
return new JDataVersionedWrapperLazy(version, rawData);
public JData deserialize(ByteString data) {
try (var is = data.newInput()) {
return SerializationHelper.deserialize(is);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}