2012-10-19 82 views
5

鉴于ZipFilezip,其ZipEntryentry和目标FileunzippedEntryFile,什么是写entryunzippedEntryFile最可读的方式是什么?将ZipEntry写入文件最可读的方法是?

我想出了利用Google GuavaApache.Commons.IO以下解决方案:

InputSupplier<ByteArrayInputStream> entryInputSupplier = ByteStreams.newInputStreamSupplier(IOUtils.toByteArray(zip.getInputStream(entry))); 
Files.copy(entryInputSupplier, unzippedEntryFile); 

然而,有些东西告诉我,它可以制成simplier。

感谢,
康拉德

回答

3

我不知道什么是不可读的关于你的代码,除了你有很多嵌套调用。这些可以被分解并分配给局部变量,这会使代码变长(但在我看来,它更易读)。

你似乎在处理数据两次 - 一次将其读入一个字节数组,然后再次将其复制到文件中。我没有测试过这一点,但它应该工作,减少数据移动量的一半:

final InputStream zipStream = zip.getInputStream(entry); 
InputSupplier<InputStream> supplier = new InputSupplier<InputStream>() { 
    InputStream getInput() { 
     return zipStream; 
    } 
}; 
Files.copy(supplier, unzippedEntryFile); 

你可以,事实上,创建一个实现InputSuppler<InputStream>自己的小类。我很惊讶我在番石榴图书馆找不到一个。 (显然,others have been surprised at this as well。)

+0

“可读”我也意味着简洁,所以我想避免创建一个新的匿名类,通常我相信可以做更少的调用来完成相同的。 –

1

下面是可能所有可能的方案为Zip file operation的快速链接。如果它是简单的文件操作,这里是来自Sun的教程。肯定有很多开源的API。这里是IO tutorial的链接。干杯

相关问题