Tag

反序列化

使用Gson序列化和反序列化

编程笔记

引入依赖

Gradle

纯文本
implementation 'com.google.code.gson:gson:2.8.8'

Maven

xml
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.8</version>
</dependency>

示例代码

java
package com.e404.test

import com.google.gson.Gson
import com.google.gson.GsonBuilder
import java.io.FileInputStream
import java.io.FileOutputStream

fun main() {
    // 反序列化
    val stu: Student = FileInputStream("in.json").use {
        it.bufferedReader().use { br ->
            Gson().fromJson(br, Student::class.java)
        }
    }
    println("stu.name: ${stu.name}")
    println("stu.age: ${stu.age}")
    // 序列化
    FileOutputStream("out.json").use {
        it.bufferedWriter().use { bw ->
            // 要写入的json字符串
            // setPrettyPrinting 是生成带缩进的字符串
            val str: String = GsonBuilder().setPrettyPrinting().create().toJson(stu)
            bw.write(str)
        }
    }
}

/**
 * 必须要有无参的构造方法和每个参数的getter和setter
 *
 * (idea下setter可以用alt+insert快速生成)
 *
 * 否则会报错
 */
class Student(var name: String = "", var age: Int = 0)

使用SnakeYaml序列化和反序列化

编程笔记

SnakeYaml官网:http://www.snakeyaml.org/

引入依赖

Gradle

纯文本
implementation 'org.yaml:snakeyaml:1.29'

Maven

xml
<dependency>
    <groupId>org.yaml</groupId>
    <artifactId>snakeyaml</artifactId>
    <version>1.29</version>
</dependency>

使用示例

java
package com.e404.test

import org.yaml.snakeyaml.DumperOptions
import org.yaml.snakeyaml.Yaml
import org.yaml.snakeyaml.nodes.Tag
import java.io.FileInputStream
import java.io.FileOutputStream

fun main() {
    // 反序列化
    val stu: Student = FileInputStream("in.yml").use {
        Yaml().loadAs(it, Student::class.java)
    }
    println("stu.name: ${stu.name}")
    println("stu.age: ${stu.age}")
    // 序列化
    FileOutputStream("out.yml").use {
        it.bufferedWriter().use { bw ->
            // 字符串 (使用dumpAs以移除bean标签)
            val str: String = Yaml().dumpAs(stu, Tag.MAP, DumperOptions.FlowStyle.BLOCK)
            bw.write(str)
        }
    }
}

/**
 * 必须要有无参的构造方法和每个参数的getter和setter
 *
 * (idea下setter可以用alt+insert快速生成)
 *
 * 否则会报错
 */
class Student(var name: String = "", var age: Int = 0)