在 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 中序列化數據類的方法。你可以根據自己的需求選擇合適的方法。