ZipFile InputStreams线程是否安全?

时间:2012-03-07 11:36:02

标签: java multithreading thread-safety zip

我找不到任何声明来指定从多个InputStream获取多个ZipEntry并在其自己的线程中处理每个{{1}}是否安全。

尝试是否安全?

是否可取?

我可以通过这种方式获得更好的表现吗?

3 个答案:

答案 0 :(得分:5)

阅读应该没问题。每个流都包含自己的状态,因此您可以打开多个指向同一文件的流并同时从中读取它们。

但同时写作是错误的。它会在您的文件中创建不匹配。

答案 1 :(得分:0)

TrueVFSTrueZIP的继承者)可以读取和写入一个ZIP文件的线程。

答案 2 :(得分:0)

ZipFile InputStreams应该是线程安全的,但是ZipFile API本身是同步的,因此一次只能由一个线程访问。

如果您希望多个线程以可伸缩的方式从同一个zip文件中读取,则必须为每个线程打开一个ZipFile实例,并且每个线程都从单独的InputStream中读取,每个InputStream都来自不同的{{1} }。这样,ZipEntry方法中的每线程锁定不会阻止只有一个线程一次读取zipfile。这也意味着当每个线程在完成读取后关闭ZipFile时,它们将关闭自己的实例,而不是共享实例,因此您不会在第二次及其后的关闭中遇到异常。

Protip:如果您真的关心速度,可以通过从第一个ZipFile实例读取所有ZipFile对象并与所有线程共享它们来获得更高的性能,以避免在读取{{1} }每个线程的对象。 ZipEntry对象本身并不绑定到特定的ZipEntry实例,ZipEntry仅记录元数据,该元数据将与代表与{{1 }}来自。