Java 中 <String,"Some Class"> 的巨大地图
Huge Map of <String,"Some Class"> in Java
在我的应用程序中,我需要根据文件的 MIME 字符串将有关文件的信息显示为友好的可读字符串。我有我需要的信息(仅供参考 /usr/share/mime/package/freedesktop.org.xml on Ubuntu 14.04),我想把所有东西都作为静态地图<"String","MIMEInfoObject">.
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+++
我在另一个 shell 脚本中使用了该输出,该脚本生成如下 java 代码:
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,尽管我不是专家)和我的应用程序将在 Desktop/Mobile 浏览器和移动应用程序 (phonegap) 上 运行。
提前致谢。
如果我理解正确的话,问题是您正在生成 java 代码来显式加载每个对象,而不是重复使用 java 代码从数据文件加载对象。不要那样做。例如,如果您有更多文件,则必须重新生成代码等。
您需要创建某种标准化的数据文件,并创建一种读取它的方法。因此,如果您的数据是 CSV 或 XML,那么您可以转储到 one/many 文件中,然后不管您有多少数据,java 代码看起来相同的。只是一个简单的循环,可以不断读取和加载地图中的内容。
在伪代码中:
while (records.hasMoreRecords()) {
records.read()...
add record to map()
}
在我的应用程序中,我需要根据文件的 MIME 字符串将有关文件的信息显示为友好的可读字符串。我有我需要的信息(仅供参考 /usr/share/mime/package/freedesktop.org.xml on Ubuntu 14.04),我想把所有东西都作为静态地图<"String","MIMEInfoObject">.
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+++
我在另一个 shell 脚本中使用了该输出,该脚本生成如下 java 代码:
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,尽管我不是专家)和我的应用程序将在 Desktop/Mobile 浏览器和移动应用程序 (phonegap) 上 运行。
提前致谢。
如果我理解正确的话,问题是您正在生成 java 代码来显式加载每个对象,而不是重复使用 java 代码从数据文件加载对象。不要那样做。例如,如果您有更多文件,则必须重新生成代码等。
您需要创建某种标准化的数据文件,并创建一种读取它的方法。因此,如果您的数据是 CSV 或 XML,那么您可以转储到 one/many 文件中,然后不管您有多少数据,java 代码看起来相同的。只是一个简单的循环,可以不断读取和加载地图中的内容。
在伪代码中:
while (records.hasMoreRecords()) {
records.read()...
add record to map()
}