Войти или зарегистрироваться

Помогите OutOfMemory

Статус
Закрыто для дальнейших ответов.

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 выяснить не довелось, то суть в том, что этого количества данных не достаточно чтобы забить выделенную память.

Опираясь на прошлый опыт я запихнул объявление переменных выше циклов, но.. это не помогло....
 
Последнее редактирование:
В общем пишу мод, но сейчас пишу только логику не особо связанную с классами мода. Кароче, вот код:
BotScript file reader v0.1 - Pastebin.com

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

Опираясь на прошлый опыт я запихнул объявление переменных выше циклов, но.. это не помогло....
Опиши суть которую должен выполнить код, а то вообще не понятно для чего это все делается.
А так же цикл while работает бесконечно и нигде не вызывается break или return, от чего предположу что он бесконечно добавляет в массив элементы.
 
Опиши суть которую должен выполнить код, а то вообще не понятно для чего это все делается.
А так же цикл while работает бесконечно и нигде не вызывается break или return, от чего предположу что он бесконечно добавляет в массив элементы.
На вход поступает строка (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.
 
Последнее редактирование:
На вход поступает строка (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 происходит в случе если имя записано(булевая переменная) и наличия символов после ':'. Записсь секции происходит по условиям наличия '-' в начале строки, предварительно записав название секции по условию отсутствия символов после ':'. После определения типа строки данные записываются в Map<String, List<String>> File;.
Как вариант для решение подобной задачи можно все упростить.
Сначала собери целый текст нужного тебе вида в String из stream или другого источника.
А затем используй String#split чтобы получить массив строк используя некоторые символы как разделитель, например символ "\n".
Таким образом ты разделишь все на под типы, уже их итерируй в цикле, и дальше делай тоже самое если тебе надо разделить key и value разделителем ":".

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

А вообще не стоит изобретать велосипед и можно было бы использовать JSON.
Json под поставленную задачу не подходит. Спасибо, тут вы реально правы, можно обойтись без стрима.
 
Json под поставленную задачу не подходит. Спасибо, тут вы реально правы, можно обойтись без стрима.
Json всегда хранит ключ и значение, а значением может быть в том числе и другой такой объект хранящий ключ и значение или даже объект который хранит список этих объектов по аналогичной логике.
Если я правильно понял суть вашего сериализатора, то json во всем выигрывает и будет даже проще если использовать библиотеку gson для сериализации и десериализации (в том числе его функции позволяющие сериализовать или десериализовать классы и поля в них)
 
Json всегда хранит ключ и значение, а значением может быть в том числе и другой такой объект хранящий ключ и значение или даже объект который хранит список этих объектов по аналогичной логике.
Если я правильно понял суть вашего сериализатора, то json во всем выигрывает и будет даже проще если использовать библиотеку gson для сериализации и десериализации (в том числе его функции позволяющие сериализовать или десериализовать классы и поля в них)
Нет, Json слишко сложен для моей задачи. Слишком много лишних символов да и функций для задачи поставленной этой системе. Файл не будет хранить в себе списки списков объектов. Yaml тоже не подходит, там есть разделение на строки и числа, что будет не нужным для поставленной задачи.
 
Нет, Json слишко сложен для моей задачи. Слишком много лишних символов да и функций для задачи поставленной этой системе. Файл не будет хранить в себе списки списков объектов. Yaml тоже не подходит, там есть разделение на строки и числа, что будет не нужным для поставленной задачи.
В Java существует ещё такая штука как Properties. Помимо этого, существуют библиотеки с альтернативными форматам.
Но если уж так хочется накостылить свой формат - рекомендую подсмотреть реализацию в Properties, потому что в текущем варианте просто море ненужного кода
 
В Java существует ещё такая штука как Properties. Помимо этого, существуют библиотеки с альтернативными форматам.
Но если уж так хочется накостылить свой формат - рекомендую подсмотреть реализацию в Properties, потому что в текущем варианте просто море ненужного кода
Переписал по совету предыдущего комментатора. 30 строк вышло.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх