2013-05-31 48 views
1

我有一段代碼從遠程服務器或從本地磁盤檢索文件。使用FileInputStream讀取文件與URLConnection

我明白URLConnection可以處理這兩種情況,所以我在想,如果有,如果我用FileInputStream讀取本地文件,而不是隻交給受URLConnection從磁盤中讀取任何性能優勢?

回答

2

不,在URLConnection上使用FileInputStream沒有任何性能優勢(當然,除非您計算少量額外方法調用的毫秒數)。

通過file:// URL讀取文件最終會得到一個FileURLConnection(請注意,這不是官方Java庫規範的一部分,只是基於Sun的JRE)。如果你看看代碼,你會發現它創建了一個FileInputStream來處理磁盤上的文件。因此,除了在堆棧中進一步向下走幾層,代碼的結果完全一樣。

你想直接使用FileInputStream的原因是爲了清晰你的代碼。把一個文件路徑轉換成一個URL有點難看,如果你只是要使用文件,那麼這樣做會令人困惑。

在你的情況,你需要使用網址在某些時候,這是很方便的,你可以使用文件URL和與網址的工作。我想你已經抽象出幾乎所有關於URL的有趣邏輯,並且可以完成在其他地方構建文件或非文件URL的醜陋事情。

+0

感謝有關它如何在引擎蓋下工作的詳細技術答案!是的,模塊目前被設置爲接受URL,因此它不需要知道文件所在的位置。 – user1941747

0

FileInputStream從文件系統中的文件獲取輸入字節。 FileInputStream用於讀取諸如圖像數據等原始字節流。

FileReader用於讀取字符流。

一般而言,創建一個對URL的連接是一個多步驟的過程:

  1. 的連接對象通過調用一個URL的openConnection方法創建的。
  2. 操作設置參數和一般請求屬性。
  3. 使用連接方法建立到遠程對象的實際連接。
  4. 遠程對象變爲可用。可以訪問標題字段和遠程對象的內容。

我認爲一個好的經驗法則是使用最簡單的代碼(對象),以保持最高效。認爲簡約!

P.S.不知道您是否只是移動文件或閱讀其內容。

+0

同意最低限度的想法。問題是資源被選定在堆棧上方,所以不是將包含的元資料傳遞給堆棧中的資源類型,而是將其更改爲URL並將堆棧下傳到代碼將更簡單。 – user1941747

相關問題