在Java中将对象转换为String的接受实践?

时间:2009-11-05 04:14:49

标签: java string object type-conversion

将任意对象转换为String表示形式的常用方法是什么,假设该对象的确切类已知?换句话说,我需要实现一些类似于以下的方法:

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的协议缓冲区),而且我可以自己轻松实现一次性解决方案。我的问题不是“我该如何解决这个问题”,而是“现有的许多现成解决方案中哪一个是当前的行业标准?”。

5 个答案:

答案 0 :(得分:3)

  

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

它们都没有成为事实上的标准。

最接近你可以得到它“默认”XML serialization mechanism如果你假装用手写它们,BTW很糟糕(当你自动使用它们就足够了)

接下来最接近标准并将用于日常使用的东西是JSON到Java,但是,你知道,它不是Java Java

答案 1 :(得分:2)

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

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

不久前我会提出一个xml序列化程序,但是在玩couchdb几天之后,我会为一个新的主人服务... json。

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

我也会投票支持Json,然后特别是Gson。它很好地处理通用/参数化对象。

或者,您也可以编写一个通用对象转换器,它可以在一点反射的帮助下完成所有需要的转换,例如this example。但是,如果您的“API”要求将此转换器作为最终用户的接口发布,那么我只建议替换

public Object asObject(String stringRepresentation, Class clazz);

例如

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

以便之后不需要施放它。

答案 4 :(得分:0)

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

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

相关问题