2015-10-26 3 views
0

В моем приложении мне нужно показать информацию о файлах как дружественную читаемую строку на основе MIME String файла. У меня есть информация, которая мне нужна (FYI, взятый из /usr/share/mime/package/freedesktop.org.xml на Ubuntu 14.04), и я бы хотел поставить все как статическую карту < «String», «MIMEInfoObject»> ,Огромная карта <String, "Some Class"> в Java

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, ... " 
} 

Я сделал скрипт, который выводит файл Линукс как это:

<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 код, как это:

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, хотя я не эксперт), и мое приложение будет работать как на рабочем столе/Мобильные браузеры и мобильное приложение (телефонная задержка).

Заранее спасибо.

+0

Поместите функциональность в метод и вызвать его. –

+1

Почему вы не разбираете XML с Java и не строите свою карту? – nneonneo

+0

@DaveNewton это уже есть. Мофоды ограничены размером байта. –

ответ

2

Проблема, если я правильно ее понимаю, заключается в том, что вы генерируете Java-код для явного загрузки каждого объекта, а не для повторного использования java-кода для загрузки объектов из файла данных. Не делай этого. Например, если у вас больше файлов, вам необходимо будет восстановить код и т. Д.

Вам необходимо создать некий стандартизованный файл данных и создать способ его чтения. Поэтому, если ваши данные CSV или XML, тогда вы можете сбросить файлы в одном или нескольких файлах, и тогда неважно, сколько данных у вас есть, код Java будет выглядеть одинаково. Просто простая петля, которая продолжает читать и загружать вещи на вашей карте.

в псевдокоде:

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

Ну, я просто пытался жестко закодировать все, потому что я не хотел хранить файл в приложении. Но, возможно, это будет правильный ответ. –

+0

Вы по-прежнему сохраняете «файл», если вы делаете это по-своему, это просто представлено большим количеством лишнего кода. Если ваши данные были меньше, вы могли бы сделать его строкой и проанализировать строку, но тем не менее вам будет полезно циклически перебирать строку, а не явным образом вызывать каждый метод каждый раз. – ergonaut

+0

Я понимаю: D Я возьму это как ответ. Я благодарю вас. –