创建大型静态资源文件是否可以接受?例如:
public class Resources {
public static String STRING1 = "xxx";
public static String STRING2 = "xxx";
...
public static String STRINGN = "xxx";
}
我希望有一个大文件,其中包含应用程序将使用的所有字符串的列表。这会引起问题吗?我不完全确定内存中是如何保存静态类的,所以我不知道这是否会导致内存问题。是太“丑陋”还是不好的形式?有没有更好的方法呢?
答案 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编辑所有来源。