Есть ли библиотека или хороший подход, чтобы сделать бинарную игру-экономию проще или быстрее на Java? - PullRequest
1 голос
/ 16 марта 2012

Мне нужно написать логику сохранения / загрузки для моей игры, но я новичок в Java и никогда не использовал бинарный ввод / вывод. Так как я еще не начал писать, есть ли какая-нибудь библиотека, которая делает это проще или быстрее (как при записи / скорости чтения)? Или какой-либо хороший способ сохранить данные ниже?

Данные сохранения состоят из около 2000 единиц (Array-Int (2000), Array-String (100), Array-Boolean (500), Array-Float (500)).

Я знаю, это очень много. Я использовал xstream для его сериализации, и размер файла, вероятно, станет равным 100-200 МБ в необработанных XML-данных, а также будет медленным при сохранении.

1 Ответ

2 голосов
/ 16 марта 2012

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

Однако, возможно, стоит подумать о дальнейшем уменьшении размера. Например, вам действительно нужны целые или достаточно шорт? Будут ли строки использовать весь алфавит Юникода, или вы можете использовать однобайтовую кодировку символов?

Самый простой способ написать файл двоичных данных - это использовать сериализацию Java, поэтому сначала я попробую (обязательно используйте BufferedOutputStream, конечно). Использование простого DataOutputStream будет немного быстрее во время выполнения и приведет к несколько более коротким файлам (из-за отсутствия дескрипторов типов), но вам придется писать поля самостоятельно.

После того, как вы это сделаете, стоит оценить, является ли CPU или I / O ограничивающим фактором (например, наблюдая за использованием CPU во время записи файла). Если у вас есть запасной процессор и достаточно регулярные данные, вы можете ускорить запись, сжимая файл на лету, например, используя GZipOutputStream.

...