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

Помогите OutOfMemory

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

Статус темы:
Закрыта.
  1. Автор темы
    XsatorYT

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

    Баллы:
    61
    Имя в Minecraft:
    XsatorYT
    В общем пишу мод, но сейчас пишу только логику не особо связанную с классами мода. Кароче, вот код:
    BotScript file reader v0.1 - Pastebin.com

    Проблема в последнем вызове (str.add(ch). Детали работы кода, при выполнении память кончается на втором(номер выполнения кода цикла) цикле for(цикла 2, for и while, for - первый цикл), то есть i == 2 в условии цикла for, при i==2 кончается память. Правда номер цикла while выяснить не довелось, то суть в том, что этого количества данных не достаточно чтобы забить выделенную память.

    Опираясь на прошлый опыт я запихнул объявление переменных выше циклов, но.. это не помогло....
     
    Последнее редактирование: 11 янв 2023
  2. MurlikMurlik

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

    Баллы:
    96
    Опиши суть которую должен выполнить код, а то вообще не понятно для чего это все делается.
    А так же цикл while работает бесконечно и нигде не вызывается break или return, от чего предположу что он бесконечно добавляет в массив элементы.
     
  3. Автор темы
    XsatorYT

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

    Баллы:
    61
    Имя в Minecraft:
    XsatorYT
    На вход поступает строка (key: value\n section:\n - key: value\n - key: value\nkey: value
    key : value
    section:
    - key: value
    - key: value
    key: value). Код разбивает строку на части в местах расположения "\n" и помещает в спиоск, после чего в цикле фор при прохождении каждого цикла в самописный стрим загружается следующая часть строки из списка. Дальше прокручивая стрим(по символьно читая строку) идёт обработка строки, то есть форма "key: value" определяется по условию дохождения стрима до конца строки и наличия считанного value, записывание value происходит в случе если не идёт запись секции(writeSection). Записсь секции происходит по условиям наличия '-' в начале строки, предварительно записав название секции по условию отсутствия символов после ':'. После определения типа строки данные записываются в Map<String, List<String>> File;.

    P.S. В коде на пастбин ошибка в if(writeSection ==false) в под ифе лишние действия есть, там должно оставаться только часть с наличием value.
     
    Последнее редактирование: 11 янв 2023
  4. MurlikMurlik

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

    Баллы:
    96
    Как вариант для решение подобной задачи можно все упростить.
    Сначала собери целый текст нужного тебе вида в String из stream или другого источника.
    А затем используй String#split чтобы получить массив строк используя некоторые символы как разделитель, например символ "\n".
    Таким образом ты разделишь все на под типы, уже их итерируй в цикле, и дальше делай тоже самое если тебе надо разделить key и value разделителем ":".

    А вообще не стоит изобретать велосипед и можно было бы использовать JSON.
     
  5. Автор темы
    XsatorYT

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

    Баллы:
    61
    Имя в Minecraft:
    XsatorYT
    Json под поставленную задачу не подходит. Спасибо, тут вы реально правы, можно обойтись без стрима.
     
  6. MurlikMurlik

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

    Баллы:
    96
    Json всегда хранит ключ и значение, а значением может быть в том числе и другой такой объект хранящий ключ и значение или даже объект который хранит список этих объектов по аналогичной логике.
    Если я правильно понял суть вашего сериализатора, то json во всем выигрывает и будет даже проще если использовать библиотеку gson для сериализации и десериализации (в том числе его функции позволяющие сериализовать или десериализовать классы и поля в них)
     
  7. Автор темы
    XsatorYT

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

    Баллы:
    61
    Имя в Minecraft:
    XsatorYT
    Нет, Json слишко сложен для моей задачи. Слишком много лишних символов да и функций для задачи поставленной этой системе. Файл не будет хранить в себе списки списков объектов. Yaml тоже не подходит, там есть разделение на строки и числа, что будет не нужным для поставленной задачи.
     
  8. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    В Java существует ещё такая штука как Properties. Помимо этого, существуют библиотеки с альтернативными форматам.
    Но если уж так хочется накостылить свой формат - рекомендую подсмотреть реализацию в Properties, потому что в текущем варианте просто море ненужного кода
     
  9. Автор темы
    XsatorYT

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

    Баллы:
    61
    Имя в Minecraft:
    XsatorYT
    Переписал по совету предыдущего комментатора. 30 строк вышло.
     
Статус темы:
Закрыта.

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