2011-11-24 112 views
0

我爲多線程Zip文件的讀者對我的不斷project.When要求我說的多線程我的意思是比如有兩個線程,都嘗試讀取相同的文件,所以我需要的東西,這兩個產生Inputstreams單獨的線程,因此壓縮文件不會被破壞。我想知道,如果有任何現有的代碼可以完成這項工作,因爲我不想重新發明輪子。多線程Zip文件閱讀器

而且這將是很好的代碼只給我上分離線程創建緩衝讀者的新實例,這樣我就可以使用的閱讀器和我的工作進行。另外,代碼還必須處理線程池,並在工作完成時將自己從線程池中刪除。

+1

磁盤IO是一個瓶頸,所以你不能有幾個流相同的文件,因此,我不認爲你會發現一個很不錯的對於這個項目,因爲它是從一個單一的文件中讀取的解決方案。有些操作系統只允許一個訪問的時間,在任何情況下。 –

+0

笏大約爲每個線程。 –

+0

我如何能夠爲每個線程創建單獨的FileInputStream只需創建單獨的FileInputStream。你能詳細說明一下嗎?閱讀知識相當薄弱。 –

回答

2

首先關閉,正如我在我的評論中寫道的那樣,磁盤IO是一個瓶頸,有時當已經打開一個文件描述符時,你不能訪問文件。

這是一個相當重要的問題,但作爲一些想法,您可以在每個線程中打開一個FileInputStream,然後在它們之間同步您正在閱讀的位置。

假設我們有兩個流:

FileInputStream f1 = new FileInputStream("test.zip"), 
    f2 = new FileInputStream("test.zip"); 

你可以閱讀你平時做什麼,然後skip(long n)在一個線程讀取一些字節之後。假設你使用f1來讀取10個字節,那麼在讀取f2之前,你會想要執行f2.skip(10),否則它會返回相同的字節。當然,假設這是你想要的。

讀取Zip文件的標題後,您可以決定所有存檔的各個部分都位於該文件中,並分別讀出那些確切的塊數。但是,正如戴夫牛頓正確指出的,儘管如此,你應該使用定義良好的庫來閱讀Zip文件。

+0

當zip類已經存在時,爲什麼要手動執行zip操作? –

+0

我不會,我只是想解釋一些基本知識。 –

1

我建議先閱讀Java中的多線程技術 - 這是瞭解問題的最佳方法,這將使您理解解決方案的更好途徑(如果您堅持嘗試多線程IO,快速的Google搜索給我帶來these結果。不過,我不同意說什麼netrom。