我面臨的情況是,我必須將300 MB的數據寫入XML。使用流我沒有面臨OutOfMemory
異常,完美地執行了任務。如何從FileOutputStream對象檢索字符串值?
現在我必須將FileOutputStream
對象轉換爲實際數據並將其作爲String
傳遞給其他方法。
我試過了,我沒有得到預期的結果。請讓我知道如何將FileOutputStream
對象轉換爲字符串值?
我面臨的情況是,我必須將300 MB的數據寫入XML。使用流我沒有面臨OutOfMemory
異常,完美地執行了任務。如何從FileOutputStream對象檢索字符串值?
現在我必須將FileOutputStream
對象轉換爲實際數據並將其作爲String
傳遞給其他方法。
我試過了,我沒有得到預期的結果。請讓我知道如何將FileOutputStream
對象轉換爲字符串值?
如果您字符串太大,你試圖在同一時間,以保持它在內存中,它會總是因爲你的OutOfMemoryError獨立於您使用的讀者的事實。
所以,問題不在於你的讀者。問題是你的String對象(你想傳遞的對象)。
如果你需要將一個巨大的文件存儲/傳遞給String變量,那麼你的架構肯定有問題。
你的錯誤是你正試圖把你的XML文本放入Java String變量中。你應該避免在內存中存儲大對象,這是關鍵點。
通常文本是一個壓縮的對象,壓縮比爲0.1 - 0.01。
嘗試使用ZipOutputStream/ZipInputStream(或一些類似的庫) - 它們在讀取/寫入文件的流中正常工作。
在我的實踐中,它可以很好地處理大型XML文件。
感謝您的回覆。正如你所提到的,我們需要改變架構。沒有其他選擇。 +1清楚地解釋它。 –
你是如何在文件中寫的? FileOutputStream的創建是可以的,但是當你使用FileOutputStream編寫時,你必須傳遞一些東西給它。當您將數據傳遞給FileOutputStream.write(some_data)
時,爲什麼不同時在StringBuffer
中寫同樣的數據?
StringBuffer內部使用append方法。在編寫大量數據時,它會給你OutOfMemory異常。 –
您是否試圖一次追加整個數據?你如何在outputStream中寫入,全部以一個字節或一個字節爲單位?如果你正在逐字節寫入,在同一個循環中,如果你對StringBuffer進行了追加,它是否會拋出異常?你也可以檢查:[鏈接](http://stackoverflow.com/questions/2431040/java-outofmemoryerror-with-stringbuilder) –
您無法從FileOutputStream
讀取。嘗試使用FileReader
來讀取文件中的數據。
你不能使用你最初用來創建文件的數據嗎?如果沒有,你可以使用XML解析器像SAX
或JDOM
讀取數據
現在我有FileOutputStream對象,我必須將其轉換爲字符串。我們如何做到這一點? –
我很困惑你想做什麼。你寫了一個文件嗎?你期望通過將FileOutputStream對象轉換爲字符串?你爲什麼需要這樣做? – Skepi
實際上,我正在做這個邏輯的方法應該返回一個字符串值,這將在其他一些方法中使用。我試過fileOutputStream.toString(),它正在返回對象。但是我需要返回一個字符串值。 –
因此,您需要使用剛寫入的數據將數據傳遞給另一個對象,或者是其他地方的數據? – Skepi
我必須讀取此FileOutputStream對象並將該字符串值傳遞給其他進程的另一個方法。 –
所以你想要:從文件中讀取行,並將此行傳遞給另一個方法參數,true? – Sajmon