2012-11-19 106 views
0

這是我的情況:我使用了一個庫,從程序存儲庫讀取文件(我不能修改該庫),該庫有一個方法getContent返回一個字符串(它使用BasicResponseHandler對字符串的響應轉換),但庫也包含二進制文件太多了,我需要bytes[]到保存爲一個文件。我嘗試使用 content.getBytes("UTF-8"),並將它與文本文件的工作,但如圖像其他文件,我得到一個損壞的文件。的byte []的InputStream轉換成字符串

BasicResponseHandler使用它來輸入轉換爲字符串(字符集是UTF-8):

Reader reader = new InputStreamReader(instream, charset); 
CharArrayBuffer buffer = new CharArrayBuffer(i); 
try { 
    char[] tmp = new char[1024]; 
    int l; 
    while((l = reader.read(tmp)) != -1) { 
     buffer.append(tmp, 0, l); 
    } 
} finally { 
    reader.close(); 
} 
return buffer.toString(); 

有誰知道我能做些什麼?

+1

做的唯一一件事就是修復BasicResponseHandler類,並使其返回一個字節數組,而不是一個字符串。 –

+4

我不認爲你可以使用該庫。如果使用任何字符集將任意'byte []'s轉換爲'String',它將不可避免地破壞內容。 –

+1

我想你需要弄清楚他們是如何將圖像文件編碼成字符串的 - 如果你不知道,那麼它現在可能會工作。也許你可以嘗試ASCII編碼? –

回答

2

當你閱讀的圖像,這不是一個字符串,並且不應該被轉換。只需將byte []的內容寫回到文件中,即可在該文件中存儲圖像。

+0

問題恰恰在於他沒有一個字節數組,而是一個String。 –

+0

是的,我同意你的意見。不要將緩衝區轉換爲字符串。在這種情況下,我同意上述評論,您不能按原樣使用BasicResponseHandler。 – dashrb

+0

我不使用BasicResponseHadler,我不得不反編譯庫以查看它們如何轉換..,我無法修改庫。 – Ali

1

如果你不能夠編輯庫代碼中使用了,我會建議在尋找一個新的圖書館使用。也許一個不會假設文件內容類型的東西。

+0

問題是它是一個本地庫,但我們沒有允許修改它。 – Ali

相關問題