2009-03-16 3 views
5

Ich reorganisiere unsere Java-Code-Basis und wollte unsere resultierenden JAR-Dateien vergleichen.Warum haben diese beiden JAR-Dateien mit identischen Inhalten unterschiedliche Dateigrößen?

Als ich in dem alten Quellbaum bauen, erhalte ich eine JAR-Datei einer Größe von 3360081.

In dem neuen Quellbaum ist es 3360128.

ich ein „jar tvf jarfile“ tun und dann Streifen die Daten aus der Datei.

Die Liste sieht wie folgt aus:

 0 Mon Mar 16 10:41:16 EDT 2009 META-INF/ 
    102 Mon Mar 16 10:41:14 EDT 2009 META-INF/MANIFEST.MF 
    0 Mon Mar 16 10:41:14 EDT 2009 decodes/ 

Nachdem ich die Daten abzustreifen, das Angebot wie folgt aussieht:

 0 META-INF/ 
    102 META-INF/MANIFEST.MF 
    0 decodes/ 

Die beiden jar Inserate identisch sind.

Was würde einen Unterschied von 47 Byte in "identischen" JAR-Dateien verursachen?

Ich bin mit der Kompilierung auf RedHat Linux 4.

+0

Was sind die Unterschiede zwischen dem "alter" und "neuer" Quellbaum? Hast du etwas umbenannt? – panschk

Antwort

7

Dateiänderungszeiten der kompilierten Dateien werden höchstwahrscheinlich der Grund. Auch Ihre Klassendateien sind möglicherweise anders. Wenn Sie Ihre Paketstruktur reorganisiert haben, werden sie es definitiv tun.

+0

Die Dateiänderungszeiten sind aus der Jar-Auflistung entfernt. Es gibt nur Dateigröße und Klassennamen. – Mel

+2

Wen interessiert die Auflistung? Die Änderungszeiten werden in der JAR-Datei gespeichert. Sie ändern sich offensichtlich, wenn Sie Ihren Code neu kompilieren und eine neue JAR-Datei erstellen. – Bombe

+0

Zustimmen, die Zeiten werden gespeichert und komprimiert, so dass sich die JAR-Größe ändert. – ReneS

2

Es ist wahrscheinlich nicht der Fall - aber bei der Erstellung der beiden Quellbasen verwenden Sie zufällig verschiedene Compiler-Versionen (auch kleinere Versionsunterschiede)?

1

Wenn Sie BeyondCompare (oder ähnlich) verwenden, wird es Ihre JAR-Dateien unterscheiden und die verschiedenen Dateien in den Archiven identifizieren (bis zu den Zeilen-/Zeichenunterschieden für eine Textdatei oder markieren Sie einfach die geänderten Binärdateien).

(Ich glaube nicht, Dateiänderungszeiten in ihrer Textdarstellung in dem .jar-Format gespeichert sind, und ich glaube nicht, dass sie Dateigrößen .jar beitragen)