Java中的<string,“some class”=“”>的巨大映射

时间:2015-10-26 19:34:29

标签: javascript java dictionary static mime

在我的应用程序中,我需要根据文件的MIME字符串将有关文件的信息显示为友好的可读字符串。我有我需要的信息(FYI取自Ubuntu 14.04上的/usr/share/mime/package/freedesktop.org.xml),我想将所有内容都作为静态映射&lt;“String”,“MIMEInfoObject”&gt ;

protected class MIMEInfoObject {
    //Getters ...
    //Setters ...
    ...
    private String mimeType; //Example: "application/pdf
    private String defaultDescription; // "PDF document"
    private String localDescription; // "Documento PDF"
    private String acronym; // "PDF"
    private String extendedAcronym; // "Portable Document Format"
    private List<String> extensionList; // "pdf .."
    private List<String> aliasList; // "application/x-pdf, application/acrobat, ... "
}

我制作了一个shell脚本,输出如下的linux文件:

<mime-type type="image/vnd.adobe.photoshop">
<comment>Photoshop image</comment>
<comment xml:lang="pt_BR">Imagem do Photoshop</comment>
<glob pattern="*.psd"/>
<alias type="image/psd"/>
<alias type="image/x-psd"/>
<alias type="image/photoshop"/>
<alias type="image/x-photoshop"/>
<alias type="application/photoshop"/>
<alias type="application/x-photoshop"/>
++++END+++

我在另一个生成java代码的shell脚本中使用了该输出:

MIMEInfoObject obj;
obj.setMimeType("application/pdf");
obj.setDefaultDescription("PDF document");
obj.setLocalDescription("Documento PDF");
obj.setAcronym("PDF");
obj.setExtendedAcronym("Portable Document Format");
if (obj.getExtensionList() == null) {
    obj.setExtensionList(new ArrayList<String>());
}
extList = obj.getExtensionList();
extList.add("*.pdf");
obj.setExtensionList(extList);
if (obj.getAliasList() == null) {
    obj.setAliasList(new ArrayList<String>());
}
aliasList = obj.getAliasList();
aliasList.add("application/x-pdf");
obj.setAliasList(aliasList);
if (obj.getAliasList() == null) {
    obj.setAliasList(new ArrayList<String>());
}
aliasList = obj.getAliasList();
aliasList.add("image/pdf");
obj.setAliasList(aliasList);
if (obj.getAliasList() == null) {
    obj.setAliasList(new ArrayList<String>());
}
aliasList = obj.getAliasList();
aliasList.add("application/acrobat");
obj.setAliasList(aliasList);
mimeString2Obj.put(obj.getMimeType(), obj);
for (String alias : obj.getAliasList()) {
    mimeString2Obj.put(alias, obj);
}

我知道上面的代码是愚蠢的,但它是我如何生成它,但问题是它生成大约17000行代码。 Java抱怨方法的字节限制,即65535,并且超出了它。

我担心的是,如果有人更好地了解如何做到这一点,请记住我正在使用GWTP(所以我可以使用JavaScript,虽然我不是专家),我的应用程序将在桌面上运行/移动浏览器和移动应用程序(phonegap)。

提前致谢。

1 个答案:

答案 0 :(得分:2)

如果我理解正确的问题是你生成java代码以显式加载每个对象,而不是重用java代码从数据文件加载对象。不要这样做。例如,如果您有更多文件,则必须重新生成代码等。

您需要创建某种标准化数据文件,并创建一个读取它的方法。因此,如果您的数据是CSV或XML,那么您可以将其转储到一个/多个文件中,然后无论您拥有多少数据,Java代码看起来都是一样的。只是一个简单的循环,可以在地图中继续阅读和加载内容。

伪代码中的

while (records.hasMoreRecords()) {
    records.read()...
    add record to map()
}