rnentjes c64df75cd5 Add initial README for typed-byte-arrays library
Provide an overview of the library's purpose, usage, and functionality. This includes a Kotlin example of defining and using `TypedByteArray` and explanation of data types and properties. The README aims to help developers understand and adopt the library effectively.
2024-12-13 21:53:37 +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-12-11 12:55:23 +01:00
2024-09-01 10:25:04 +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 LongProperty("id")
  var name by StringProperty("name")
  var age by IntProperty("age")
  var rate by DoubleProperty("rate")
  var description by ClobProperty("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 for example a string is updated 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%