2017-01-19 10 views
0

Я имею дело с некоторыми gzipped pack200 файлами и без проблем распаковываю их с помощью инструмента командной строки. У меня возникают проблемы при попытке распаковать файлы с помощью библиотеки pack200.Выходной файл библиотеки Java Pack200 отличается от результата инструмента командной строки

Для справки, это метод я использую для распаковки файлов:

//Output from this can be properly unpacked with command line tool 
InputStream in = new GZIPInputStream(new ByteArrayInputStream(compressed)); 

//This is where things go awry 
Pack200.Unpacker unpacker = Pack200.newUnpacker(); 
JarOutputStream out = new JarOutputStream(new FileOutputStream("file.jar")); 
unpacker.unpack(in, out); 

Здесь выход unpacker.properties():

com.sun.java.util.jar.pack.default.timezone: false 
com.sun.java.util.jar.pack.disable.native: false 
com.sun.java.util.jar.pack.verbose: 0 
pack.class.attribute.CompilationID: RUH 
pack.class.attribute.SourceID: RUH 
pack.code.attribute.CharacterRangeTable: NH[PHPOHIIH] 
pack.code.attribute.CoverageTable: NH[PHHII] 
pack.deflate.hint: keep 
pack.effort: 5 
pack.keep.file.order: true 
pack.modification.time: keep 
pack.segment.limit: -1 
pack.unknown.attribute: pass 

Некоторые другая соответствующая информация:

  • Файлы jar, выводимые библиотекой, последовательно меньше, чем те, которые распакованы инструментом командной строки.
  • Файлы, созданные в библиотеке, используют более новую версию формата .zip (0x14 vs 0x0A).
  • unpack200.exe версия 1,30, 07/05/05
  • JDK версия 1.7.0_21

Так подтвердить, что банка-файлы, созданные с помощью функции инструмента командной строки, в то время как правильно генерируемая библиотеки сделать не.

Я очень ценю любую помощь или руководство.

+0

Вы не закрываете выход. Необходимость в этом конкретно упоминается в Javadoc для 'Pack200', и вы всегда должны закрывать' OutputStreams' и 'Writers' в любом случае. – EJP

+0

@EJP Да, я решил это. Довольно глупая ошибка с моей стороны. – Aierou

ответ

0

Это было что-то очень простое, но я рад, что нашел проблему. Вот решение, которое я был в состоянии использовать:

//Output from this can be properly unpacked with command line tool 
InputStream in = new GZIPInputStream(new ByteArrayInputStream(compressed)); 

//This is where things go awry 
Pack200.Unpacker unpacker = Pack200.newUnpacker(); 
JarOutputStream out = new JarOutputStream(new FileOutputStream("file.jar")); 
unpacker.unpack(in, out); 
out.close(); 

Не забывайте JarOutPutStream.close();, дети.