Simple, performant message library for Java.
Go to file
Andrew Lalis 3720d3074d Update readme, add docs and clean up IOUtil 2023-09-22 10:46:28 -04:00
src Update readme, add docs and clean up IOUtil 2023-09-22 10:46:28 -04:00
.gitignore Added first version stuff. 2022-04-16 13:03:21 +02:00
LICENSE Initial commit 2022-04-16 11:05:09 +02:00
README.md Update readme, add docs and clean up IOUtil 2023-09-22 10:46:28 -04:00
pom.xml Add example, set release version 1.0.0 2023-09-22 09:56:47 -04:00

README.md

record-net

Simple, performant message library for Java, using records. It allows you to serialize and deserialize records and their contents for use in network or filesystem IO.

Add it to your Maven project like so:

<dependency>
    <groupId>com.andrewlalis</groupId>
    <artifactId>record-net</artifactId>
    <version>1.0.0</version>
</dependency>

or Gradle:

implementation 'com.andrewlalis:record-net:1.0.0'

Example

import com.andrewlalis.record_net.RecordMappedSerializer;
import java.io.*;

class Main {
    public static void main(String[] args) throws IOException {
        record MyData(int a, float b, String s) {}
        record FileData(String name, byte[] data) {}
        
        // Register the record types you want to use.
        RecordMappedSerializer serializer = new RecordMappedSerializer();
        serializer.registerType(MyData.class);
        serializer.registerType(FileData.class);

        // Write records.
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        serializer.writeMessage(new MyData(42, 3.1415f, "Hello world!"), out);
        serializer.writeMessage(new FileData("test.txt", new byte[]{1, 2, 3, 4}), out);
        byte[] serialized = out.toByteArray();

        // Read records.
        Object obj = serializer.readMessage(new ByteArrayInputStream(serialized));
        switch (obj) {
            case MyData d -> System.out.println("Got MyData: " + d);
            case FileData d -> System.out.println("Got file data: " + d);
            default -> throw new RuntimeException();
        }
    }
}

Module System

If using the Java Platform Module System (JPMS), then you should add an opens declaration to open any packages containing your records to the record-net module. For example, suppose I have defined my serializable records in com.example.app.data. Then my module-info.java might look like this:

module com.example.app {
    // Require record-net as a dependency:
    requires com.andrewlalis.record_net;
    // Allow record-net to inspect our records:
    opens com.example.app.data to com.andrewlalis.record_net;
}

For more info on the module system, consult this helpful article: https://www.oracle.com/corporate/features/understanding-java-9-modules.html