jksoa-rpc 提供了多种序列化实现, 默认为fast-serialization序列化技术.
序列器的接口是 ISerializer
package net.jkcode.jkmvc.serialize
import java.io.ByteArrayInputStream
import java.io.InputStream
/**
* 序列器
*
* @author shijianhang
* @create 2017-10-04 下午3:29
**/
interface ISerializer {
/**
* 序列化
*
* @param obj
* @return
*/
fun serialize(obj: Any): ByteArray?
/**
* 反序列化
*
* @param bytes
* @return
*/
fun unserialize(bytes: ByteArray): Any? {
return unserialize(ByteArrayInputStream(bytes))
}
/**
* 反序列化
*
* @param input
* @return
*/
fun unserialize(input: InputStream): Any?
}
类族为
ISerializer
JdkSerializer
FstSerializer -- fast-serialization序列化技术
ProtostuffSerializer
HessianSerializer
KryoSerializer
参考 FstSerializer
package net.jkcode.jkmvc.serialize
import org.nustaq.serialization.FSTConfiguration
import java.io.InputStream
/**
* 基于fast-serialization的序列化
*
* @Description:
* @author shijianhang<[email protected]>
* @date 2017-11-10 4:18 PM
*/
class FstSerializer: ISerializer {
/**
* 配置
*/
public val conf = FSTConfiguration.createDefaultConfiguration()
/**
* 序列化
*
* @param obj
* @return
*/
public override fun serialize(obj: Any): ByteArray? {
return conf.asByteArray(obj)
}
/**
* 反序列化
*
* @param bytes
* @return
*/
public override fun unserialize(bytes: ByteArray): Any? {
return conf.getObjectInput(bytes).readObject()
}
/**
* 反序列化
*
* @param input
* @return
*/
public override fun unserialize(input: InputStream): Any? {
return conf.getObjectInput(input).readObject()
}
}
# 序列器的类型
jdk: net.jkcode.jkmvc.serialize.JdkSerializer
fst: net.jkcode.jkmvc.serialize.FstSerializer
kryo: net.jkcode.jkmvc.serialize.KryoSerializer
hessian: net.jkcode.jkmvc.serialize.HessianSerializer
protostuff: net.jkcode.jkmvc.serialize.ProtostuffSerializer
val serializer: ISerializer = ISerializer.instance("序列器名") // 获得序列器
val obj = "hello world"
val bs = instance.serialize(obj) // 序列化
if(bs != null) {
val obj2 = instance.unserialize(bs!!) // 反序列化
println(obj2)
}