2010-04-12 95 views
0

我有一個java.io.Reader作爲我的方法的返回類型。但我有一個實例的對象類型,我從數據庫中獲得。那麼我怎樣才能將它轉換成Reader類型並返回?對象類型爲Reader類型?

我有以下代碼,其中getByteArrayObject()返回一個字節數組。和我需要返回一樣,但返回類型是我不能改變的Reader。

public Reader getMediaReader(String arg0) { 
    // TODO Auto-generated method stub 
    Object obj = getByteArrayObject(); 
    System.out.println("HELLO I AM DETCTED....... in getMediaReader"); 
    return null; 
    } 

需要幫助 謝謝。

回答

3

根據您編輯的問題...

假設由getByteArrayObject()返回的字節數組是一些已知的字符集/編碼編碼的文本,那麼以下就足夠了:

public Reader getMediaReader(String arg0) throws IOException { 
    byte[] bytes = getByteArrayObject(); 
    return new InputStreamReader(
       new ByteArrayInputStream(bytes), ENCODING_NAME); 
} 

其中ENCODING_NAME是編碼的名稱。

編輯 - 我猜冒arg0參數應該包含編碼名稱。

1

首先我想澄清的是,java中沒有將一個對象自動轉換爲另一個對象的概念。 你從數據庫中獲得什麼樣的對象?它本身是讀者對象的序列化版本,然後在反序列化中,你應該找回讀者對象。 如果你想從對象的內容中構造一個閱讀器對象,假設有一個你想要閱讀的字符串數據,你需要創建一個StringReader並返回,因爲這擴展了閱讀器。

Java中的讀者類表示字符流層次結構。

+0

(一個閱讀器對象的序列化版本聽起來有點瘋狂,我......) – 2010-04-12 06:08:10

+0

我同意......但原始問題中的信息是少一點,所以我去猜測路徑:) – Fazal 2010-04-13 15:37:26

2

那麼調用者如何期望讀取數據?他們期望得到什麼?

這聽起來像你可能要序列某種基於文本的格式(JSON?XML?),然後返回一個StringReader這將讓客戶端讀取數據。但是這取決於客戶期望的內容......並且您可能需要編寫一個類似的方法來基於該文本數據創建對象的新實例。

當你考慮序列化時,也值得考慮版本控制 - 一旦你掌握了你想要做的事情的基礎知識,就想想如果你爲你的課堂添加一個字段會發生什麼。你將如何閱讀舊數據?舊代碼會如何處理您的新數據?你需要如何兼容後向和前向?

相關問題