Sıralanan Veri
Hizmet sistemi yönetilirken :javadoc: sabit veri işlemcisi veriyi depolamak için iyi bir yöntemdir, bilgisayar başlatılırken devam etmez. Fakat, :javadoc: her veri işlemcisi :javadoc: veri serilerinin ara birimini tamamlar ve böylelikle veri deposu sıralanabilir :javadoc: ve veri oluşturucu tarafından seriden paralele çevrilir. :javadoc.
Ön dönüşüm veri yönlendiricisinden genel yapıya çevrildikten sonra veri deposu daha ileriye yönlendirebilir.
Veri Deposu ve Veri Görüntüsü
Bir :javadoc: Veri Görüntüsü herhangi bir veri çeşidini depolamak için genel amaçlı bir yapıdır. Veri görüntüsü bir değer olarak çoklu değerleri destekleyebilir ve hatta iç içe geçirilebilir, böylelikle sıralama yapısı için izin verilir. Her değer bir veri sorgusu tarafında :javadoc: tanımlanır. Veri deposu veri görüntüsünün bir kök dizinidir.
Her veri sıralaması veri deposuna dönüşür ve oluşturulan depoların bilgilerini sağlar. Örneğin sağlıklı verilerde ki oluşumu kapsayıcı olarak adlandırılan iki değerden oluşan veri deposuna sonuç verecektir,bunlardan biri akım için, bir diğeri maksimum sağlıklı veri için şahsi anahtarların veri sorgusu tarafından tanımlanır.
import org.spongepowered.api.data.DataContainer;
import org.spongepowered.api.data.key.Keys;
DataContainer serializedHealth = healthData.toContainer();
double currentHealth = serializedHealth.getDouble(Keys.HEALTH.getQuery()).get();
currentHealth == healthData.health().get(); // true
Bu depolama sağlıklı veri örneğine geri dönüşümü eşleşen veri kurucusu :javadoc: tarafından yapılır. Bunlar yönetici veri tarafından kaydedilir ve yönetilir. Bu bir geçerli oyun oluşumu tarafından :javadoc: ya da yararlı parazit sınıfını :javadoc: kullanarak elde edilebilir. Veri yöneticisi verilen sınıfı seriden paralele dönüştürmek için ve ayrıca özet veri yöneticisi metodunu almak uygun veri kurucusunu elde etmek için uygun yöntemi sağlar ve bu seriden paralele çevirme işlemi bir adımda yapılır. Her iki takip edilen kod örneği de fonksiyonel olarak eşdeğerdir.
Kod örneği: Seriden paralele çevirme. uzun yol
import org.spongepowered.api.data.DataView;
import org.spongepowered.api.data.manipulator.mutable.entity.HealthData;
import org.spongepowered.api.util.persistence.DataBuilder;
import java.util.Optional;
public Optional<HealthData> deserializeHealth(DataView container) {
final Optional<DataBuilder<HealthData>> builder = Sponge.getDataManager().getBuilder(HealthData.class);
if (builder.isPresent()) {
return builder.get().build(container);
}
return Optional.empty();
}
Kod örneği: Seriden paralele çevirme, kısa yol
import org.spongepowered.api.data.manipulator.mutable.entity.HealthData;
public Optional<HealthData> deserializeHealth(DataView container) {
return Sponge.getDataManager().deserialize(HealthData.class, container);
}
Sağlanan veri deposu boşsa ya da sağlıklı veri için yönetilen veri yapımcısı yoksa seriden paralele çevirme sağlığı fonksiyonu isteğe bağlı boşluğa dönüşür. Verilen veri deposunda geçersiz veri varsa, :javadoc: harici geçersiz veri atılır.
Veri çevirici
Çerezde genellikle veri görüntüsü belleği uygulaması :javadoc: ve :javadoc: sadece bellekte bulunan veri deposu belleği kullanılır ve böylelikle başlatılan sunucu tarafından zorlanmaz. Kalıcı olarak veri deposunu yüklemek için, bu öncelikle temsili depolamaya dönüştürülmek zorundadır.
Veri çevirici yapı düzenlemesini kullanarak :javadoc: veri çeviricisi yöntemini :javadoc:, yapı düzenlemesi :javadoc: ve benzerinden veri görüntüsüne dönüştürebiliriz. Yapı düzenlemesi, sonradan yazılabilir ve sürekli dosyalardan yapı belleği kullanılarak :doc: okunabilir.
Kod örneği: düzenleme için sağlıklı veri örneğinin serileştirmek
import ninja.leaping.configurate.ConfigurationNode;
import org.spongepowered.api.data.persistence.DataTranslator;
import org.spongepowered.api.data.persistence.DataTranslators;
public ConfigurationNode translateToConfig(HealthData data) {
final DataTranslator<ConfigurationNode> translator = DataTranslators.CONFIGURATION_NODE;
final DataView container = data.toContainer();
return translator.translate(container);
}
Kod örneği: düzenlemeden sağlıklı bir veri örneği ayarlamak
import java.util.Optional;
public Optional<HealthData> translateFromConfig(ConfigurationNode node) {
final DataTranslator<ConfigurationNode> translator = DataTranslators.CONFIGURATION_NODE;
final DataView container = translator.translate(node);
return deserializeHealth(container);
}
Veri Boyutu
Veri biçimi kullanmak için :javadoc: alternatif olarak veri çeviricisi kullanmanız size HOCON’DA ya da NBT biçiminde bir veri deposu yüklemenize izin verir. Ayrıca veri biçimlerini kullanarak veri depolarını yeniden oluşturabilirsiniz. Çerezden sağlanan veri biçimi uygulaması :javadoc: veri biçimleri sınıfında mevcuttur.
Örneğin, bize izin verilen bir JSON veri deposu uygulamasını oluşturmak için veri biçimi :javadoc: kullanabiliriz. JSON çıktıları veri tabanına kolaylıkla yüklenebilir. Daha sonra gerektiğinde bu JSON’dan orijinal veri deposunu tekrar oluşturmak için aynı veri deposunu kullanabiliriz.
Kod örnekleri için çıktılar
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;
Kod örneği: yığılan madde belleğini JSON biçimine sıralamak
String json = DataFormats.JSON.write(itemStack.toContainer());
Kod örneği: yığılan madde belleğini JSON biçiminden seriden paralele çevirme
DataContainer container = DataFormats.JSON.read(json);
Kod örneği: yığılan madde belleğini kullanılan NBT dosyasına yazmak
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();
}
}
Kod örneği: yığılan madde belleğini kullanılan NBT dosyasından okumak
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();
}