2012-08-14 55 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