1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Оптимизация работы с файлом config.yml

Тема в разделе "Разработка плагинов для новичков", создана пользователем Dodick, 10 авг 2024.

  1. Автор темы
    Dodick

    Dodick Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Direktor
    Всем привет. Появился вопрос об оптимизации работы с конфигом. Как лучше сделать?
    Сейчас я получаю значения из конфига:
    Код:
    //В главном классе
    public static File file = new File(getDataFolder() + File.separator+"config.yml");  //находится в главном классе Admin
    
    //В любых других классах
    FileConfiguration config = YamlConfiguration.loadConfiguration(Admin.file); //Admin - главный класс в котором содержится переменная "file", которая в свою очередь содержит путь к файлу
    Главный вопрос в том что, когда я использую конструкцию
    YamlConfiguration.loadConfiguration(Admin.file), что происходит в этот момент? Он заново открывает конфиг и копирует все данные или ссылается на уже загруженный?

    Получаю нужную строку таким образом: config.getString("бла-бла-бла");

    Я задумался над тем, чтобы создать отдельный класс (get,set) который будет загружать данные из конфига в отдельные переменные, т.к конфиг хранит только ответные сообщения и при необходимости они будут возвращать мне значения. Не получится ли так, что я проделаю двойную работу и есть ли в этом смысл?

    Или прописать одну единственную переменную config и обращаться к ней: public FileConfiguration config = YamlConfiguration.loadConfiguration(Admin.file) и в остальных классах ссылаться на него?

    в YamlConfiguration (Spigot-API 1.21.1-R0.1-SNAPSHOT API) (spigotmc.org) написано, что создает новую YamlConfiguration, загружаемую из заданного файла.

    Пишу плагин для версии майнкрафт 1.21
    Использую java 21
     
    Последнее редактирование: 10 авг 2024
  2. SashaBrine

    SashaBrine Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    IJustFortiLive
    Так я не понял, ты сам на свой же вопрос ответил
     
  3. Автор темы
    Dodick

    Dodick Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Direktor
    Точно:lol:, но как лучше организовать оптимизацию? Создать отдельный класс в котором переменные будут хранить строки и листы или есть какой-то более эффективный способ? Т.к в конфиге может быть очень много ответных сообщений и для каждой строки писать отдельную переменную очень время-затратно
     
  4. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Храни переменную config, это уже загруженные данные конфига, а в других классах уже обращайся к ней.
     
  5. Автор темы
    Dodick

    Dodick Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Direktor
    То есть мне достаточно ее один раз объявить и сделать публичной?
    public FileConfiguration config = YamlConfiguration.loadConfiguration(Admin.file);
     
  6. Автор темы
    Dodick

    Dodick Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Direktor
    изменил FileConfiguration на YamlConfiguration и действительно конфиг загружается в ОЗУ (один раз) и далее вытаскивает от туда данные. Проверил я так: после загрузки сервера удалил файл конфигурации и проверил работу плагина (при этом у меня одна переменная на все классы), все работает нормально, потом еще проверил на старой версии плагина, где в каждом классе есть своя переменная конфига и там тоже все работает нормально, но возможно, что он каждый раз при обращении делает копию копии. Используя одну переменную возможно проблема проявится в чем-то другом, но это не точно, не проверял. Если кто знает ответ - напишите ПЖ сюда
     
    Последнее редактирование: 11 авг 2024
  7. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Не будет никаких проблем и копий, ты работаешь со ссылкой на один и тот же объект в оперативной памяти
     
  8. Автор темы
    Dodick

    Dodick Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    Direktor
    Всем спасибо за ответ!
     

Поделиться этой страницей