簡體   English   中英

存儲java程序的只讀數據的最有效方法是什么?

[英]What is the most efficient way to store read-only data for a java program to read?

我有一個我試圖編程的游戲,但它的初始數據輸入是巨大的。 事情是所有這些數據都是只讀的。 所以當程序運行時,每次都是一樣的。

我需要問這個問題的原因是因為我認為每次運行程序時通過類系統重新運行數據是低效的。 最初我使用的是XML設置:

XML設置示例:

<?xml version="1.0"?>
<gameBoard>
    <!-- Area 1 -->
    <area name="Area 1">
        <arrows white="Area 2" black="Area 3" />
        <color>white</color>

        <location name="Area 1 Atrium" />
        <location name="Location 1.1">
            <attr1>foo</attr1>
            <attr2>bar</attr2>
            <attr3>foobar</attr3>
        </location>
        <location name="Location 1.2">
            <attr1>foo</attr1>
            <attr2>bar</attr2>
            <attr3>foobar</attr3>
        </location>
        <location name="Location 1.3">
            <attr1>foo</attr1>
            <attr2>bar</attr2>
            <attr3>foobar</attr3>
        </location>
    </area>
</gameBoard>

我選擇了JSON或YAML,因為每個位置和區域標簽的屬性都派上用場,而且我最了解XML,我知道它的支持程度如何。

但是,這是最好的事情嗎? 每次玩家移動時,我認為它必須遍歷此設置以找到玩家想要移動到的特定位置(技術上它不會迭代文檔,因為Java的DOM解析器首先將整個文檔加載到內存中, 但是無論哪種方式)。

我的第二個想法是為每個區域創建一個類,每個區域都有一個方法,只需通過方法設置變量(例如, playerLocation將設置為一個位置的名稱,這很容易完成)。

此外,這些數據絕不是人類可讀的。 我知道,當數據是字節碼時,它通常要快得多,因此也可以。 只有程序需要讀取它,即使用戶要更改XML / WhateverOtherConfig文件,添加也會被忽略。

謝謝你的耐心等待。 如果我需要澄清任何事情,請告訴我。 這非常處於阿爾法階段,我甚至都沒有想到我的想法,所以我只是因為我想到它的大部分內容。 再次感謝! 如果有需要澄清,請告訴我。

需要考慮兩個級別的優化。

  1. 解析和構造對象圖的開銷
  2. 從磁盤加載的開銷

首先考慮低開銷序列化 ,如JSON(正如@Perception所指出的那樣),但也許您應該考慮二進制序列化,因為這將加載最快。

對於第二個考慮使用OS技術,如內存映射文件來幫助您。

但在所有優化問題中,我必須說 - 首先測量度量並再次測量以確定真正的性能問題所在。

您可以使用直接二進制格式(您自己創建的)或者如果您想要更多靈活性,可以嘗試簡單地將對象直接序列化到磁盤。 這些選項可以提供您所追求的效率。 我強調可能是因為沒有實際的分析器,就無法100%確定問題所在。

JSON將是一個不錯的選擇。 我也建議你看看Lua。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM