Serializing Data
Peringatan
These docs were written for SpongeAPI 7 and are likely out of date. If you feel like you can help update them, please submit a PR!
While an DataManipulator#Immutable is a good way to store data while the server is running, it will not persist over a restart. However, every DataManipulator implements the DataSerializable interface and thus can be serialized to a DataContainer and deserialized by a DataBuilder.
Setelah konversi awal ini dari DataManipulator
khusus ke struktur yang lebih umum, DataContainer
dapat diproses lebih lanjut.
Wadah Data dan Tampilan Data
DataView adalah struktur umum untuk memegang semua jenis data. Mendukung beberapa nilai dan bahkan DataView
s bersarang sebagai suatu nilai, sehingga mengizinkan untuk struktur seperti-tree. Setiap nilai diidentifikasikan oleh DataQuery. DataContainer
merupakan akar DataView
.
Format Data
DataFormat allows you to store a DataContainer
in HOCON, JSON or NBT format.
You can also recreate DataContainers using DataFormats
. Sponge provided DataFormat
implementations are available in the DataFormats class.
Sebagai contoh, kita dapat menggunakan DataFormat#JSON DataFormat yang memungkinkan kita untuk membuat JSON representasi dari Datakontainer. Pengeluaran JSON kemudian bisa dengan mudah disimpan dalam database. Kita kemudian dapat menggunakan yang sama DataFormat untuk menciptakan asli Datakontainer dari JSON ini bila diperlukan.
Impor untuk contoh kode
import org.spongepowered.api.Sponge;
import org.spongepowered.api.data.DataContainer;
import org.spongepowered.api.data.persistence.DataFormats;
import org.spongepowered.api.item.inventory.ItemStackSnapshot;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Optional;
** Contoh Kode: Serializing sebuah ItemStackSnapshot ke format JSON **
String json = DataFormats.JSON.write(itemStack.toContainer());
** Contoh Kode: Deserializing sebuah ItemStackSnapshot dari format JSON **
DataContainer container = DataFormats.JSON.read(json);
** Contoh Kode: Menulis sebuah ItemStackSnapshot ke file menggunakan NBT **
public void writeItemStackSnapshotToFile(ItemStackSnapshot itemStackSnapshot, Path path) {
DataContainer dataContainer = itemStackSnapshot.toContainer();
try (OutputStream outputStream = Files.newOutputStream(path)) {
DataFormats.NBT.writeTo(outputStream, dataContainer);
} catch (IOException e) {
// For the purposes of this example, we just print the error to the console. However,
// as this exception indicates the file didn't save, you should handle this in a way
// more suitable for your plugin.
e.printStackTrace();
}
}
** Contoh Kode: Membaca ItemStackSnapshot dari sebuah file menggunakan NBT **
public Optional<ItemStackSnapshot> readItemStackSnapshotFromFile(Path path) {
try (InputStream inputStream = Files.newInputStream(path)) {
DataContainer dataContainer = DataFormats.NBT.readFrom(inputStream);
return Sponge.getDataManager().deserialize(ItemStackSnapshot.class, dataContainer);
} catch (IOException e) {
e.printStackTrace();
}
return Optional.empty();
}