1

因此,我正在尝试使用 getText() 或 write() 方法将 Representation 转换为 String 或 StringWriter。看来我只能在 Representation 上成功调用此方法一次......如果我再次调用该方法,它会在第二次调用时返回 null 或空字符串。为什么是这样?我希望它每次都返回相同的东西:

public void SomeMethod(Representation rep)
{
    String repAsString = rep.getText();  // returns valid text for example: <someXml>Hello WOrld</someXml>

    String repAsString2 = rep.getText(); // returns null...  wtf?
}

如果我“做错了”,那么我愿意接受有关如何获取该数据的任何建议。

4

2 回答 2

4

javadocs对此进行了解释:

如果存在稳定且可访问的源(例如本地文件或字符串),则可以多次检索表示的内容。当通过诸如网络套接字之类的临时源获得表示时,其内容只能检索一次。

所以大概它是直接从网络或类似的东西读取的。

您可以通过调用来检查这一点isTransient()。如果您需要能够多次读取它,大概您应该将其转换为字符串,然后Representation从该字符串创建一个新的。

于 2010-09-29T05:23:11.153 回答
2

这是因为一般来说,在您使用 getText() 请求它之前,实际上不会从 InputStream 中读取表示,并且一旦您请求它,所有字节都已被读取并转换为字符串。

这是效率的自然实现:与其创建一个可能非常大的字符串,然后将该字符串转换为有用的东西(JSON 对象、DOM 树或其他),不如编写转换器来操作 InputStream,避免制作和阅读那个巨大的字符串的成本。

因此,例如,如果您将一个大型 XML 文件放入 Web 服务中,您可以将 InputStream 直接提供给 SAX 解析器。

(正如@John 所指出的,StringRepresentation 包装了一个字符串,因此可以多次读取。但您必须正在读取请求的表示,这很可能是 InputRepresentation。)

于 2010-09-29T05:23:46.250 回答