Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

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
 
Последнее редактирование:
Всем привет. Появился вопрос об оптимизации работы с конфигом. Как лучше сделать?
Сейчас я получаю значения из конфига:
Код:
//В главном классе
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
Так я не понял, ты сам на свой же вопрос ответил
 
Так я не понял, ты сам на свой же вопрос ответил
Точно:lol:, но как лучше организовать оптимизацию? Создать отдельный класс в котором переменные будут хранить строки и листы или есть какой-то более эффективный способ? Т.к в конфиге может быть очень много ответных сообщений и для каждой строки писать отдельную переменную очень время-затратно
 
Точно:lol:, но как лучше организовать оптимизацию? Создать отдельный класс в котором переменные будут хранить строки и листы или есть какой-то более эффективный способ? Т.к в конфиге может быть очень много ответных сообщений и для каждой строки писать отдельную переменную очень время-затратно
Храни переменную config, это уже загруженные данные конфига, а в других классах уже обращайся к ней.
 
Храни переменную config, это уже загруженные данные конфига, а в других классах уже обращайся к ней.
То есть мне достаточно ее один раз объявить и сделать публичной?
public FileConfiguration config = YamlConfiguration.loadConfiguration(Admin.file);
 
Храни переменную config, это уже загруженные данные конфига, а в других классах уже обращайся к ней.
изменил FileConfiguration на YamlConfiguration и действительно конфиг загружается в ОЗУ (один раз) и далее вытаскивает от туда данные. Проверил я так: после загрузки сервера удалил файл конфигурации и проверил работу плагина (при этом у меня одна переменная на все классы), все работает нормально, потом еще проверил на старой версии плагина, где в каждом классе есть своя переменная конфига и там тоже все работает нормально, но возможно, что он каждый раз при обращении делает копию копии. Используя одну переменную возможно проблема проявится в чем-то другом, но это не точно, не проверял. Если кто знает ответ - напишите ПЖ сюда
 
Последнее редактирование:
изменил FileConfiguration на YamlConfiguration и действительно конфиг загружается в ОЗУ (один раз) и далее вытаскивает от туда данные. Проверил я так: после загрузки сервера удалил файл конфигурации и проверил работу плагина (при этом у меня одна переменная на все классы), все работает нормально, потом еще проверил на старой версии плагина, где в каждом классе есть своя переменная конфига и там тоже все работает нормально, но возможно, что он каждый раз при обращении делает копию копии. Используя одну переменную возможно проблема проявится в чем-то другом, но это не точно, не проверял. Если кто знает ответ - напишите ПЖ сюда
Не будет никаких проблем и копий, ты работаешь со ссылкой на один и тот же объект в оперативной памяти
 

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

Назад
Верх