创建大型静态资源文件有什么问题吗?

时间:2011-10-07 16:11:56

标签: java string static

创建大型静态资源文件是否可以接受?例如:

public class Resources {
    public static String STRING1 = "xxx";
    public static String STRING2 = "xxx";
    ...
    public static String STRINGN = "xxx";
}

我希望有一个大文件,其中包含应用程序将使用的所有字符串的列表。这会引起问题吗?我不完全确定内存中是如何保存静态类的,所以我不知道这是否会导致内存问题。是太“丑陋”还是不好的形式?有没有更好的方法呢?

3 个答案:

答案 0 :(得分:4)

我会将文件系统中的语言文件和类似内容保存为纯文本(或某些特殊格式)。然后您可以轻松更改文本等。然后你可以写一个静态类(LanguageFactory)来获取你的字符串。

示例语言文件:

  英文文件      

! - OutGameMenu Strings - !

     

joinGame =加入游戏   createGame =创建游戏

LanguageFactory:

public class LanguageFactory {
    private static final String PREFIX = "/languages/";
    public static final int ENGLISH = 1;
    public static final int GERMAN = 2;
    public static final int DEFAULT = ENGLISH;
    //List of available InProperties:

    public static final String JOIN_GAME = "joinGame";
    public static final String CREATE_GAME = "createGame";

    private static Properties language;

    public static String getString(String text){
        if(language == null){
            setLanguage(DEFAULT);
        }
        return language.getProperty(text);
    }

    public static void setLanguage(int language){
        switch (language) {
        case ENGLISH:
            setLanguage("en.lang");
            break;
        case GERMAN:
            setLanguage("de.lang");
            break;
        }
    }

    private static void setLanguage(String path){
        language = new Properties();
        try {
            InputStream fi = LanguageFactory.class.getResourceAsStream((PREFIX+path));
            language.load(fi);
            fi.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

答案 1 :(得分:1)

如果文件大小相对于已分配的可用工作内存(旧Gen)数量很大,则会导致问题。

据推测,您要将文件的内容加载到某种地图中?

如果您需要能够非常快速地访问文件中的数据,那么具有内存表示是有意义的。

答案 2 :(得分:1)

我会留下属性文件。 (例如,与NetBeans IDE一样。)有足够的工具来实现国际化。您以后总是可以迁移。首先是动态ListResourceBundle。然后是其他解决方案(比如您自己的数据库库ResourceBundle)。

我甚至不会把它包起来,所以你可以使用IDE支持(// NOI18N等)。 最好花点时间用词汇表,短语小册子来组织i18n (“无法打开xxx文档。”)。 属性文件的一个问题是编码是带有\ u转义符的ISO-8859-1。 我的解决方案是一个maven插件,用于复制从UTF-8 Unicode过滤的资源。 并以UTF-8编辑所有来源。