Читаем и пишем в файл статики

  • 12
  • Недоступна
Пришло время «статиков»! Реализуйте логику записи в файл и чтения из файла для класса ClassWithStatic. Метод load должен инициализировать объект включая статические поля данными из файла. А метод main в тестировании не участвует.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (139)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
artinsky
Уровень 20, Киев, Украина
25 апреля, 12:07
Делал через рефлексию. Из плюсов: довольно универсально получается. Проблем с сохранением статических переменных нет, хотя, как написали ниже, само по себе сохранение статиков вызывает вопросы с т. зрения остальных объектов. Плюс, познакомился с новым хорошим инструментом. Из минусов: конечно, алгоритм ограниченно универсальный и закрывает только 2 типа: Integer & String (но больше и не надо было). Вот если бы в объекте добавилась ссылка на другой объект, который надо сериализовать, то всё заиграло другими красками).
Антон Власов
Уровень 39, Russian Federation
20 января, 21:24
хм. 5 строчек в одном методе. 6 во втором - о чем эта задача? о статическом поле и о том, что с ним нужно осторожно, т.к. каждый объект класса может его нечаянно поменять? у кого какие мысли?
Yuri_S Инженер-конструктор 2к.
9 февраля, 16:04
Хорошая задача, о статическом поле, ага. 2 строки в теле save, 4 строки в теле load 😁 ps: можно save и в 1 строку сделать:
new PrintStream(outputStream).write((i + ":" + j + ":" + staticString).getBytes());
Dmitrii
Уровень 23, Екатеринбург
31 декабря 2021, 05:11
Не понимаю, в чем отличие между PrintWriter и PrintStream?
Runner76rus
Уровень 27, Ярославль, Россия
16 января, 14:05
А ты загляни к ним в конструктор и всё поймёшь)
Yuri_S Инженер-конструктор 2к.
9 февраля, 15:20
Судя по названию - один writer, другой stream writrer работает с символами, stream работает с байтами
Sergey Kornilov
Уровень 39, Petropavlovsk, Казахстан
28 ноября 2021, 06:01
Всего эту задачу решили 15461 учеников.
Николай Лехманов
Уровень 51, Санкт-Петербург, Russian Federation
1 июня, 12:39
Всего эту задачу решили 16536 учеников.
Александр Работает в ООО
26 ноября 2021, 20:42
хм, статическую переменную тоже нужно сохранить хоть это и противоречит здравому смыслу )
Chillentino
Уровень 37, Оренбург, Россия
20 февраля, 07:14
Почему противоречит? Значение то меняется
Антон
Уровень 40, Москва, Russian Federation
29 октября 2021, 18:23
Типо все классно, задача классная, но альтернативное решение принимать не хочет, сделал 2мя способами, отличными, от правильного. Делал все через запись и считывание строки целиком, валидатор принимает только свое решение, которое тоже не работает(об этом ниже). Решал так: 1) через регулярку, выстрадал, но хотел понять регулярки, сделал. валидатор не принимает, все работает, кроме одного условия (об этом ниже) 2) считывание строки в массив по сплиту через пробел(как и писал строку в файл), 2 последних элемента массива парсим под значения, все что перед ними стрингбилдим в трогу и выдаем в нашу искому статик строку, все работает, кроме 1 условия(об этом ниже) Теперь собственно про правильное решение от джавараша, и что посыпалось у них и у меня: В общем коде, есть такая замечательная строчка:
public static String staticString = "This is a static test string";
так вот, как только ты заносишь в строку перенос строки (для примера сразу напишу сюда вариант):
public static String staticString = "This is a static test string\n";
то решение как мое, так и правильное от джавараша сыпется, выдавая ошибку(можете сами проверить) я перетестил свои 2 кода которые написал, с кучей разных форматов прихода строки и интов, и каждый раз задачка сыпется как только то в строку добавишь "\n" Отсюда есть большая просьба, сделать валидатор под конкретные условия конкретно данной задачи, чтоб люди не думали, а что если другая строка будет приходить, а что если пустая, и т.д. и т.п. В задании есть конкретная строка, давайте работать с ней. Либо переписать условия задачи. Никакого хейта в сторону ресурса нет, очень доволен тем, что изучаю, но в некоторых задачах откровенное "догнадайся сам", либо есть ощущение, что авторам было немножко лень. Если есть вопросы или желание, посмотреть мой код, который я отправлял, с радостью поделюсь.
Denis
Уровень 32, Краснодар, Russian Federation
20 декабря 2021, 21:40
В коде от JR ещё один сюрприз есть на внимательность... В методе "main()" есть строка:
outputStream.flush();
В классе "FileOutputStream" этот метод не реализован, а на глаза он попадается, а значит не внимательный разработчик в голове ставит галочку "метод flush() вызван, мне его уже не вызывать". Я через "BufferedWriter" записываю текст в файл, а файл при чтении пустой. Подставляю метод "flush()" после "bufferedWriter.write()" - и ура, данные записались в файл. Подставочка....
Nemo
Уровень 28, Москва, Россия
5 октября 2021, 14:30
В чем прикол статиков? вроде ничего не обычного не наблюдается...
Роман Кончалов
Уровень 28, Россия
Expert
23 сентября 2021, 15:04
Задача из разряда "как делать не надо", но она необходима для понимания: почему при штатной сериализации не затрагиваются статические переменные. Подсказка: чтобы статические переменные не перезаписать (как случается в нашей задаче) во всех экземплярах класса, если они уже существуют на момент выполнения load(); P.S. Вообще не стоит читать что-то про сериализцию при решении этих задач, только запутаете себя) Делать надо то, что написано в задании 😎
aleksdenni
Уровень 37, Полтава, Украина
29 августа 2021, 19:50
Когда открыл задачу , даже приблизительно не мог понять что от меня хотят и как это сделать 😺 Но немного просмотрев код ( около 30 минут ) мне начало доходить что происходит 😼 Также в требованиях не было сказано про вывод сравнения обьектов , хотя может он и не нужен. У меня не принимало так как я забыл переменные в инт , со строки распарсить. inputStream и outputStream обернул , что б проще записывать и читать.
Yarik Таксист в Яндекс.Такси
17 августа 2021, 15:06
Нужно повторить статические переменные.