ru.astrainteractive.astralibs.encoding.encoder.DefaultObjectEncoder.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of core Show documentation
Show all versions of core Show documentation
Core utilities for spigot development
package ru.astrainteractive.astralibs.encoding.encoder
import ru.astrainteractive.astralibs.encoding.factory.JavaObjectStreamFactory
import ru.astrainteractive.astralibs.encoding.factory.ObjectStreamFactory
import ru.astrainteractive.astralibs.encoding.model.EncodedObject
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
/**
* Default implementation for [ObjectEncoder] to create different encoders
* with different [ObjectStreamFactory]
*/
class DefaultObjectEncoder(
private val streamProvider: ObjectStreamFactory = JavaObjectStreamFactory,
) : ObjectEncoder {
override fun toByteArray(obj: T): EncodedObject.ByteArray {
val bostream = ByteArrayOutputStream()
val os = streamProvider.createOutputStream(bostream)
os.writeObject(obj)
os.flush()
return EncodedObject.ByteArray(bostream.toByteArray())
}
override fun fromByteArray(byteArray: EncodedObject.ByteArray): T {
val byteArrayInputStream = ByteArrayInputStream(byteArray.value)
val objectInputStream = streamProvider.createInputStream(byteArrayInputStream)
return objectInputStream.readObject() as T
}
override fun toBase64(obj: T): EncodedObject.Base64 {
val encoder = java.util.Base64.getEncoder()
val byteArray = toByteArray(obj)
val encoded = encoder.encodeToString(byteArray.value)
return EncodedObject.Base64(encoded)
}
override fun fromBase64(base64: EncodedObject.Base64): T {
val decoder = java.util.Base64.getDecoder()
val decoded = decoder.decode(base64.value)
return fromByteArray(EncodedObject.ByteArray(decoded))
}
}