2 years ago

#33128

test-img

Leon Adeoye

How to implement read and write methods of Chronicle Map SizedWriter and SizedReader interfaces for class with string member

I have created a simple class:

public class Example
{
   private String name;
   private int age;
   // With getters and setters.
}

that I would like "put" into a chronicle map:

            ChronicleMap<String,Example> map = ChronicleMapBuilder
                    .of(String.class, Example.class)
                    .name("example-map")
                    .entries(5_000)
                    .averageValue(new Example())
                    .valueMarshaller(ExampleSerializer.getInstance())
                    .averageKey("Horatio")
                    .createPersistedTo(new File("../logs/example.txt"));

However, I do not fully understand how to implement the ExampleSerializer class because I am not sure how the string member variables should be handled. How do I size strings? In the read and write methods, how do I read the string member variable, and how do I write the string member variable respectively. Pls note that on average, the name member string length will be between 7-10 characters. I have created the serializer below:

public class ExampleSerializer implements SizedReader<Example>,SizedWriter<Example>
{
    private static ExampleSerializer INSTANCE = new ExampleSerializer();

    public static ExampleSerializer getInstance() { return INSTANCE; }

    private ExampleSerializer() {}

    @NotNull
    @Override
    public Example read(Bytes in, long size, @Nullable Example using)
    {
        if (using == null)
            using = new Example();

        using.setAge(in.readInt());
        using.setName(in.readUtf8()); // NOT SURE IF THIS IS CORRECT FOR A STRING
        return using;
    }

    @Override
    public long size(@NotNull Example toWrite)
    {
        return Integer.BYTES + ???; // NOT SURE WHAT THE SIZE SHOULD BE FOR STRING MEMBER?
    }

    @Override
    public void write(Bytes out, long size, @NotNull Example toWrite)
    {
        out.writeInt(toWrite.getAge());
        out.writeUtf8(toWrite.getName()); // NOT SURE IF THIS IS CORRECT FOR A STRING
    }
}

java

serialization

chronicle

chronicle-map

0 Answers

Your Answer

Accepted video resources