All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ru.astrainteractive.astralibs.encoding.encoder.DefaultObjectEncoder.kt Maven / Gradle / Ivy

There is a newer version: 3.14.1
Show newest version
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))
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy