在 Kotlin 中,数据类(data class)是一种特殊的类,用于存储简单的数据结构
Serializable
接口:首先,让你的数据类实现 Serializable
接口。然后,在类定义中添加一个 init
块,用于生成 serialVersionUID
。serialVersionUID
是一个用于识别类版本的唯一标识符,它在反序列化过程中起到关键作用。
import java.io.Serializable
data class User(val name: String, val age: Int) : Serializable {
init {
serialVersionUID = 1L
}
}
现在,你可以使用 Java 标准库中的 ObjectOutputStream
和 ObjectInputStream
对 User
数据类进行序列化和反序列化。
import java.io.*
fun main() {
val user = User("Alice", 30)
// 序列化
val fileOut = FileOutputStream("user.ser")
val out = ObjectOutputStream(fileOut)
out.writeObject(user)
out.close()
fileOut.close()
// 反序列化
val fileIn = FileInputStream("user.ser")
val inStream = ObjectInputStream(fileIn)
val user2 = inStream.readObject() as User
inStream.close()
fileIn.close()
println("Deserialized user: $user2")
}
首先,你需要在项目的 build.gradle.kts
文件中添加 kotlinx.serialization 插件和库的依赖。
plugins {
kotlin("jvm") version "1.5.31"
kotlin("plugin.serialization") version "1.5.31"
}
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.0")
}
接下来,为你的数据类添加 @Serializable
注解。这将自动生成一个用于序列化和反序列化的 KClass
实例。
import kotlinx.serialization.Serializable
@Serializable
data class User(val name: String, val age: Int)
现在,你可以使用 Kotlin 序列化库提供的 Json
类对 User
数据类进行序列化和反序列化。
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
fun main() {
val user = User("Alice", 30)
// 序列化
val json = Json.encodeToString(user)
println("Serialized user: $json")
// 反序列化
val user2 = Json.decodeFromString<User>(json)
println("Deserialized user: $user2")
}
这就是在 Kotlin 中序列化数据类的方法。你可以根据自己的需求选择合适的方法。