rnentjes e1002a5e0b Add slice functionality to SlicedByteArray with tests and edge case validation
Implemented a `slice` method in `SlicedByteArray` to allow creating sub-arrays with specified offset and length. Added validations to handle invalid inputs and bounds. Introduced `SliceTest` to cover standard, edge cases, and error scenarios. Bumped version to 0.3.2.
2025-06-15 16:10:52 +02:00
2024-12-20 16:34:10 +01: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 difference 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 with a shorter element, the remaining bytes are zeroed to make compression as efficient as possible.

Strings are stored as UTF-8 bytes, there is also a CachedStringProperty that 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%