rnentjes 9be32b6a53 Fix size calculation and update build configuration
Corrected the `size` property in `SlicedByteArray` to account for offset. Bumped the version to 0.2.7 and added a custom Maven repository to the build script. Adjusted the `settings.gradle.kts` file to clean up formatting.
2024-12-17 20:40:07 +01:00
2024-09-01 19:11:15 +02:00
2024-09-01 10:25:04 +02:00
2024-09-01 19:11:15 +02:00
2024-09-01 10:25:04 +02:00
2024-09-01 10:25:04 +02:00

typed-byte-arrays

This is a small library to make working with byte arrays easier. I developed this as an alternative to kotlin serialization which was cumbersome to use and much too slow for my use case.

A TypeByteArray is a wrapper around a ByteArray that defines what bytes map to which property. This way there is only data conversion to convert the bytes to the property and back when the property is accessed. The data can be sent as the bytearray that it actually is.

Usage

This is what a definition could look like:

class Person() : TypedByteArray(
  Type("id", DataType.LONG),
  Type("name", DataType.STRING, 100),
  Type("age", DataType.INT),
  Type("rate", DataType.DOUBLE),
  Type("description", DataType.CLOB, 100000)
) {
  var id by long("id")
  var name by string("name")
  var age by int("age")
  var rate by double("rate")
  var description by clob("description")

  constructor(name: String, age: Int) : this() {
    this.name = name
    this.age = age
    this.rate = 1.0
    this.description = "Nothing here yet."
  }

  constructor(data: ByteArray): this() {
    check(data.size == definition.size) {
      "Invalid data size: ${data.size} != ${definition.size}"
    }

    this.data = MutableByteArrayHandler(data)
  }
}

The different between STRING and CLOB is the maximum size (32kb vs 2gb). For any type where the length isn't fixed we need to provide max size. When such a type is updated, for example we update a string with a shorter string, the remaining bytes are zeroed to make compression as efficient as possible.

Strings are stored as UTF-8 bytes, there is also a CachedStringProperty which will keep a copy of the string so it isn't converted to a native string every time it's accessed.

Description
No description provided
Readme 216 KiB
Languages
Kotlin 100%