запись данных в файлы с Java - PullRequest
1 голос
/ 02 марта 2011

Я пишу сервер на Java, который позволяет клиентам играть в игру, похожую на 20 вопросов.Сама игра в основном представляет собой двоичное дерево с узлами, которые представляют собой вопросы об объекте, и листьями, которые являются предположениями об идентичности объекта.Когда игра угадывает неправильно, она должна быть в состоянии получить правильный ответ от игрока и добавить его в дерево.Эти данные затем сохраняются в файле произвольного доступа.

Вопрос в следующем: как вы представляете дерево в файле, чтобы в дальнейшем можно было повторно обработать данные в виде дерева.

Если вы знаете, где я могу найти информацию о сохранении структур данных, таких как деревья, организованных как таковые при записи / чтении в файлы, тогда, пожалуйста, свяжите это.Большое спасибо.


Спасибо за быстрый ответ всем.Это школьный проект, поэтому у него есть некоторые странные требования, такие как использование файлов с произвольным доступом и telnet.

Ответы [ 4 ]

2 голосов
/ 02 марта 2011

Эти данные затем сохраняются в файле произвольного доступа .

Это сложный способ решения вашей проблемы (я имею в виду бит "произвольного доступа")).

Проблема, которую вы действительно пытаетесь решить, состоит в том, как сохранить «сложную» структуру данных.На самом деле, есть несколько способов сделать это.Вот некоторые из них ...

  • Использовать постоянство Java.Это просто реализовать;убедитесь, что ваша структура данных сериализуема, а затем всего несколько строк кода для сериализации и еще несколько строк для десериализации.Недостатки:

    • Сериализированные объекты могут быть хрупкими перед лицом изменений кода.
    • Сериализация не является инкрементной.Вы пишете / читаете весь график каждый раз.
    • Если у вас есть несколько отдельных сериализованных графиков, вам нужна схема для присвоения им имен и управления.
  • ИспользованиеXML.Это больше работы для реализации, чем постоянство Java, но преимущество в том, что она менее хрупкая.И если что-то пойдет не так, есть вероятность, что вы можете это исправить с помощью XSLT или текстового редактора.(Существуют XML-библиотеки «связывания», которые устраняют большую часть склеивания.)

  • Использование базы данных SQL.Это устраняет все недостатки персистентности Java, но требует большего кодирования ... и использования другой вычислительной модели для доступа к постоянным данным (запрос в сравнении с навигацией по графику).

  • Использование базы данныхи технология объектно-реляционного отображения;например, реализация JPA или JDO.(Hibernate является популярным выбором).Они обеспечивают более или менее прозрачную связь между базой данных и представлениями данных в памяти и позволяют избежать большого количества связующего кода, который необходимо записать в базу данных SQL и в случаях XML.

1 голос
/ 02 марта 2011

Как уже упоминалось, сериализация - это то, что вы ищете. Это позволяет вам записать объект в файл и прочитать его позже с минимальными усилиями. Файл будет автоматически считан как тип вашего объекта. Это делает вещи намного проще, чем пытаться хранить объект самостоятельно, используя XML.

1 голос
/ 02 марта 2011

Я думаю, вы ищете сериализацию.Попробуйте это:

http://java.sun.com/developer/technicalArticles/Programming/serialization/

0 голосов
/ 03 марта 2011

Сериализация Java имеет некоторые подводные камни (например, когда вы обновляете свой класс). Я бы сериализовал в текстовом формате. Json - мой первый выбор, но xml и yaml тоже подойдут.

Таким образом, вы получите файл, который не зависит от двоичной версии вашего класса.

Есть несколько библиотек Java: http://www.json.org

Некоторые примеры:

http://code.google.com/p/json-simple/wiki/DecodingExamples

http://code.google.com/p/json-simple/wiki/EncodingExamples

А для сохранения и чтения из файла вы можете использовать Commons Io :

import org.apache.commons.io.FileUtis;
import java.io.File;
...
File dataFile = new File("yourfile.json");
String data = FileUtils.readFileToString(dataFile);

FileUtils.writeStringToFile(dataFile, content);
...