2014-11-27 16 views
5

Realizzo un programma di database offline che include molte immagini, sufficienti a rendere il file jar di 4 GB, che, come mi dice Netbeans, non è consentito.Come aggirare il limite JAR da 4 GB

Vorrei sapere quale potrebbe essere il modo migliore per ottenere i miei file con questo limite e come programmare nei metodi per accedere alle immagini con Java. La cartella di immagini è attualmente di 4.63 GB e diventerà più grande (forse di alcuni MB) negli aggiornamenti futuri.

Che cosa suggerisci, Stackoverflow?

+0

Una cosa che potreste fare è quello di rimuovere tutte le immagini non necessarie e rendere il vostro app più leggero. Sono davvero necessarie quelle immagini? – BackSlash

+3

Distribuisci le tue immagini in modo diverso? Forse un programma di installazione che mette le immagini sul filesystem esterno; allora potresti leggere le immagini da lì. –

+0

@BackSlash Probabilmente posso ridurre le dimensioni un po ', ci provo prima. –

risposta

10

È possibile creare più vasi. Perché deve essere un vaso singolo?

anche partendo con Java 1.7.0 costruire 55 Java supporta vasi e file zip più grandi di 4 GB, vedi questo post:

ZIP64, The Format for > 4G Zipfile, Is Now Supported

è anche possibile comprimere le immagini, utilizzare un formato diverso che li comprime a dimensioni più piccole quindi complessivamente saranno meno di 4 GB; considera la compressione con perdita come JPEG. Se sono già compressi al massimo, puoi prendere in considerazione la possibilità di ridurne le dimensioni (ad esempio 500 x 250 pixel anziché 1000 x 500).

Edit:

Citando formare javadoc di java.util.zip package:

Un'implementazione eventualmente può supportare le estensioni formato ZIP64 (tm) definiti dal PKWARE ZIP File Format Specification. Le estensioni di formato ZIP64 (tm) vengono utilizzate per superare i limiti di dimensione del formato ZIP originale.

Quindi sembra che l'implementazione di Java sia supportata da Zip64, non è un requisito di specifica. Il primo link suggerisce però che OpenJDK lo supporta.

Inoltre Googleing un po 'sembra che tutti i JDK Oracle lo supportano dopo il rilascio menzionato (1.7.0 b55). Netbeans potrebbe negare di creare giare più grandi di 4 GB se è una vecchia versione o perché vuole mantenere la compatibilità con le JVM più vecchie.

Come sapere se il tuo Java lo supporta?

In caso di Oracle JRE/JDK: cercare il file rt.jar (runtime.jar) di JRE/JDK. Aprilo (è un file zip) e vai nella cartella java/util/zip. Se ha un file ZipConstants64.class, ha il supporto per Zip64.

Da codice Java: provare ad acquisire l'oggetto Class per la classe indicata. Se ci riesce, Oracle JRE/JDK lo sostiene:

System.out.println("Java version: " + System.getProperty("java.version")); 
System.out.println("Java vendor: " + System.getProperty("java.vendor")); 
try { 
    Class.forName("java.util.zip.ZipConstants64"); 
    System.out.println("Your Java supports Zip64 :)"); 
} catch (ClassNotFoundException e) { 
    System.out.println("Your Java doesn't support Zip64 :("); 
} 

uscita:

Java version: 1.8.0_20 
Java vendor: Oracle Corporation 
Your Java supports Zip64 :) 
+0

Non ho mai sentito parlare di usare più barattoli ... Dovrò cercarlo. Inoltre, c'è qualcosa che devo fare con Netbeans per far funzionare ZIP64? Sono aggiornato su Java e mi viene ancora detto che il barattolo supera il limite di 4 GB. –

+0

@ NathanielD.Hoffman Googleing un po 'sembra che tutti i JDK Oracle lo supportano dopo il rilascio menzionato (1.7.0 b55). Netbeans potrebbe negare di creare giare più grandi di 4 GB se è una vecchia versione o perché vuole mantenere la compatibilità con le JVM più vecchie. – icza

Problemi correlati