我找不到任何声明来指定从多个InputStream
获取多个ZipEntry
并在其自己的线程中处理每个{{1}}是否安全。
尝试是否安全?
是否可取?
加
我可以通过这种方式获得更好的表现吗?
答案 0 :(得分:5)
阅读应该没问题。每个流都包含自己的状态,因此您可以打开多个指向同一文件的流并同时从中读取它们。
但同时写作是错误的。它会在您的文件中创建不匹配。
答案 1 :(得分:0)
答案 2 :(得分:0)
ZipFile
InputStreams应该是线程安全的,但是ZipFile
API本身是同步的,因此一次只能由一个线程访问。
如果您希望多个线程以可伸缩的方式从同一个zip文件中读取,则必须为每个线程打开一个ZipFile
实例,并且每个线程都从单独的InputStream中读取,每个InputStream都来自不同的{{1} }。这样,ZipEntry
方法中的每线程锁定不会阻止只有一个线程一次读取zipfile。这也意味着当每个线程在完成读取后关闭ZipFile
时,它们将关闭自己的实例,而不是共享实例,因此您不会在第二次及其后的关闭中遇到异常。
Protip:如果您真的关心速度,可以通过从第一个ZipFile实例读取所有ZipFile
对象并与所有线程共享它们来获得更高的性能,以避免在读取{{1} }每个线程的对象。 ZipEntry
对象本身并不绑定到特定的ZipEntry
实例,ZipEntry
仅记录元数据,该元数据将与代表与{{1 }}来自。