我有一段代碼從遠程服務器或從本地磁盤檢索文件。使用FileInputStream讀取文件與URLConnection
我明白URLConnection
可以處理這兩種情況,所以我在想,如果有,如果我用FileInputStream
讀取本地文件,而不是隻交給受URLConnection
從磁盤中讀取任何性能優勢?
我有一段代碼從遠程服務器或從本地磁盤檢索文件。使用FileInputStream讀取文件與URLConnection
我明白URLConnection
可以處理這兩種情況,所以我在想,如果有,如果我用FileInputStream
讀取本地文件,而不是隻交給受URLConnection
從磁盤中讀取任何性能優勢?
不,在URLConnection
上使用FileInputStream
沒有任何性能優勢(當然,除非您計算少量額外方法調用的毫秒數)。
通過file://
URL讀取文件最終會得到一個FileURLConnection
(請注意,這不是官方Java庫規範的一部分,只是基於Sun的JRE)。如果你看看代碼,你會發現它創建了一個FileInputStream
來處理磁盤上的文件。因此,除了在堆棧中進一步向下走幾層,代碼的結果完全一樣。
你想直接使用FileInputStream
的原因是爲了清晰你的代碼。把一個文件路徑轉換成一個URL有點難看,如果你只是要使用文件,那麼這樣做會令人困惑。
在你的情況,你需要使用網址在某些時候,這是很方便的,你可以使用文件URL和僅與網址的工作。我想你已經抽象出幾乎所有關於URL的有趣邏輯,並且可以完成在其他地方構建文件或非文件URL的醜陋事情。
FileInputStream從文件系統中的文件獲取輸入字節。 FileInputStream用於讀取諸如圖像數據等原始字節流。
FileReader用於讀取字符流。
一般而言,創建一個對URL的連接是一個多步驟的過程:
我認爲一個好的經驗法則是使用最簡單的代碼(對象),以保持最高效。認爲簡約!
P.S.不知道您是否只是移動文件或閱讀其內容。
同意最低限度的想法。問題是資源被選定在堆棧上方,所以不是將包含的元資料傳遞給堆棧中的資源類型,而是將其更改爲URL並將堆棧下傳到代碼將更簡單。 – user1941747
感謝有關它如何在引擎蓋下工作的詳細技術答案!是的,模塊目前被設置爲接受URL,因此它不需要知道文件所在的位置。 – user1941747