2012-08-14 91 views
0

我正在嘗試編寫一個Java程序來解碼和編碼Ogg流。我有一個解碼器工作,但我不喜歡這樣的事實,我不得不重複的代碼,所以我開始寫類似的東西:反射,散列表或性能方法?

Decoder oggDecoder = new Decoder(
    new StringDecoder("Ogg"), 
    new IntDecoder("something")//, ... 
); 

我寫的編碼器和解碼器的一些「類型」,然後用它們來構建整個事情。 但是我不知道如何存儲結果。我知道3個選項: - 將數據保存在一個字節數組中,並提供可直接在字節上工作的get(String name)set(String name, Object value)方法。 - 使用字典。 - 使用一個類並使用反射來設置屬性。

我對性能沒有太大的瞭解,如果速度很慢,只要速度足夠快就可以讀取音樂,我並不在乎。這意味着我知道自己編寫這些函數會讓它更快,但是我只想編寫一個適用於所有屬性的函數。

那麼你認爲這樣做的最快方法是什麼?

另一種方式來問這個問題是: 給定一組字段名稱作爲一個String數組,什麼是最合適的數據結構來存儲接到一個字節流解碼的相應值: - 讓他們作爲字節 - 將它們存儲在字典中 - 使用反射將它們存儲在類中

在此先感謝您的回答。

回答

2

KISS - 只需使用HashMap<String, byte[]>。不需要反射。

更新 我不認爲我一開始就明白你想要什麼,但現在我認爲你所尋找的是一個異質地圖結構。

這是question,可能對您更有用。

+0

那麼在這種情況下,我不妨將它們保留在原始字節數組中...... 因爲使用散列表/類的整個要點是讓數據具有正確的類型,例如4個字節作爲整數,因爲在對它進行解碼之後,我需要一種「簡單」的方式從程序的另一部分(例如從Ogg流中讀取數據並讀取其中的Vorbis數據包)讀取數據。 – xavierm02 2012-08-14 15:23:59

+0

是否真的沒有辦法告訴它「你將需要準確的***字節:int,a ...等? 因爲名稱是動態的,因爲我不想寫同樣的東西20次,但最後它們不會改變 – xavierm02 2012-08-14 15:48:36

+0

經過一段時間,看起來你是對的,除非你使用HashMap,否則它會變得非常複雜,我將使用HashMap 雖然。 – xavierm02 2012-08-14 16:23:54