我对正在进行的项目有一个多线程Zip文件阅读器的要求。当我说多线程时我的意思是例如有两个线程并且都尝试读取相同的文件所以我需要在两个单独的线程上创建Inputstreams的东西所以zip文件不会被破坏。我想知道,如果有任何可用的代码可以完成工作,因为我不想重新发明轮子。
这也很好,代码只是给我在分离的线程上创建的缓冲读者的新实例,这样我就可以使用读者继续我的工作了。此外,代码还必须处理线程池,并在完成工作后从线程池中删除自己。
答案 0 :(得分:2)
首先关闭,正如我在评论中写的那样,磁盘IO是一个瓶颈,有时当你已经有一个打开的文件描述符时,你无法访问文件。
这是一个强加的问题,但是作为一些思考的问题,你可以在每个帖子中打开FileInputStream
,然后在它们之间同步你正在阅读的位置。
假设我们有两个流:
FileInputStream f1 = new FileInputStream("test.zip"),
f2 = new FileInputStream("test.zip");
您可以像往常一样阅读,然后在一个线程中读取一些字节后再skip(long n)
。假设您使用f1
读取10个字节,那么您需要在读取f2.skip(10)
之前执行f2
,否则它将返回相同的字节。当然,假设这就是你想要的。
在读取Zip文件的标题后,您可以确定存档的所有单个部分在文件中的位置,并分别读取这些确切的块。但是,正如Dave Newton所说,你应该使用定义良好的库来读取Zip文件。
答案 1 :(得分:1)
我建议首先阅读Java中的多线程 - 这是了解问题的最佳方式,这将使您了解解决方案的更好途径(如果您坚持尝试多线程IO。快速的Google搜索带来了我these结果。但是,我确实同意netrom的说法。