Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Đọc và ghi file bằng Gson Streaming API trong Java

Có thể đọc và ghi file sử dụng Gson Streaming API dựa trên tiêu chuẩn đọc/ghi tuần tự. JsonWriter và JsonReader là hai lớp cốt lõi cho streaming write/read trong Streaming API.

  • JsonWriter: Ghi giá trị JSON encoded vào stream, từng token một. Stream bao gồm cả giá trị literal (strings, numbers, booleans, nulls) và delimiters begin/end của objects và arrays.
  • JsonReader: Đọc giá trị JSON encoded dưới dạng stream token. Cũng bao gồm literal values và begin/end delimiters. Token được duyệt theo thứ tự depth-first, cùng thứ tự xuất hiện trong JSON document.

Ghi file dùng JsonWriter

Ví dụ

import java.io.*;
import com.google.gson.stream.*;

public class JsonWriterTest {
    public static void main(String args[]) {
        JsonWriter writer;
        try {
            writer = new JsonWriter(new FileWriter("input.json"));
            writer.beginObject();
            writer.name("name").value("Adithya");
            writer.name("age").value(25);
            writer.name("technologies");
            writer.beginArray();
            writer.value("Java");
            writer.value("Scala");
            writer.value("Python");
            writer.endArray();
            writer.endObject();
            writer.close();
            System.out.println("Ghi dữ liệu vào file thành công");
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

Kết quả

Ghi dữ liệu vào file thành công

Đọc file dùng JsonReader

Ví dụ

import java.io.*;
import com.google.gson.stream.*;

public class JsonReaderTest {
    public static void main(String args[]) {
        JsonReader reader;
        try {
            reader = new JsonReader(new FileReader("input.json"));
            reader.beginObject();
            while(reader.hasNext()) {
                String name = reader.nextName();
                if(name.equals("name")) {
                    System.out.println(reader.nextString());
                } else if(name.equals("age")) {
                    System.out.println(reader.nextInt());
                } else if(name.equals("technologies")) {
                    reader.beginArray();
                    while(reader.hasNext()) {
                        System.out.println(reader.nextString());
                    }
                    reader.endArray();
                } else {
                    reader.skipValue();
                }
            }
            reader.endObject();
            reader.close();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

Kết quả

Adithya
25
Java
Scala
Python

Ưu điểm: Streaming API tiết kiệm bộ nhớ, phù hợp cho JSON lớn (không load toàn bộ vào RAM). Nhược điểm: code phức tạp hơn so với data binding API (toJson/fromJson).