2009-11-05 55 views
4

假设已知对象的确切类别,什么是将任意对象转换为字符串表示或从其转换字符串表达式的常用方法?换句话说,我需要实现类似于以下一些方法:接受的练习用于将对象转换为Java中的字符串和从中转换为字符串?

public interface Converter { 

    /** 
    * Convert this object to its String representation. 
    */ 
    public String asString(Object obj); 

    /** 
    * Take the String representation of an object produced by asString, 
    * and convert it back to an object of the appropriate class. 
    */ 
    public Object asObject(String stringRepresentation, Class clazz); 
} 

理想情况下,解决方案应:

  • 如果可能的话使用对象的内置的toString()功能。因此,converter.asString(new Integer(5))应该返回“5”,并且converter.asObject(“5”,Integer.class)应该返回值为5的Integer。
  • 生成输出,尽可能可读。
  • 处理所有常见的Java数据类型,包括java.util.Date。
  • 允许我为自己的自定义类插入转换功能。
  • 合理轻量且高效。

我知道有很多现成的解决方案可以做到这一点(比如Google的协议缓冲区),并且我可以轻松地自行实施一次性解决方案。我的问题不是“我该如何解决这个问题”,而是“现有的许多现成解决方案中的哪一个是当前的行业标准?”。

回答

2

我会投票给Json,特别是Gson。它非常好地处理泛型/参数化对象。

或者,您也可以编写一个通用对象转换器,它可以在反射的帮助下完成所有需要的转换,如this example。但是,如果你的“API”规定,该转换器将被发布为终端用户界面,那么我只能建议通过例如

public <T extends Object> T asObject(String stringRepresentation, Class<T> clazz); 

,这样一个没有按更换

public Object asObject(String stringRepresentation, Class clazz); 

”之后需要施放它。

3

我的问题不是“我该如何解决这个问题”,而是“现有的许多现成的解决方案中的哪一个是当前的行业标准?”。他们的

都没有成为事实标准。

你能得到它“默认” XML serialization mechanism如果你假装用手把它们写(当你自动使用他们来说,这是不够好)

最接近的标准,并且接下来的事情,这BTW吸最接近将用于日常使用,将是JSON到Java,但是,你知道,它不是Java Java

0

我同意奥斯卡,如果你可以容忍大的未压缩文件大小,XML可能是更好的形式。为了详细说明他的回答,根据我的经验,如果您编写了一个相当简单的实用程序类,您可以将对象序列化为XML,而不需要太多工作。要阅读它们,我会推荐Apache Digester,它在基于规则的解释方面做得很好。

如果我关心性能或文件大小,我只会选择其他文件格式,尽管在大多数情况下我都会更喜欢XML的灵活性。

2

你可以看看svenson库,它将java对象转换为json。它非常快速并使用注释来引入自定义转换器。

http://code.google.com/p/svenson/

不久前,我会提出了一个XML序列化,但couchdb玩了几天后,我成为新的主... JSON。

2

尽管使用或尝试实现“toString()”作为可逆操作很诱人,但“toString()”的目的是生成一个对象的用户友好且易于理解的表示形式,而此目标常常与包含足够的状态信息以真正恢复原始对象不一致。

如果您想要坚持一个对象,使用XML,JSON或二进制序列化可能是最好的方法。 “toString()”函数应报告对象的人性化表示(例如“5”,“(3,0,2)”,“5 + 6i”,“{1,2,3,4,5 ,6}“,”{x => y,z => 3}“等)。即使在可以从生成的字符串中完全恢复对象的情况下,编写函数来解析每种类型(潜在非结构化)文本的时间也可以通过自动XML持久性得到最佳保存,以利于编写实际应用程序。