所以, 我想表示转换为字符串或StringWriter的或者使用了gettext()或write()方法。看来我只能一次成功调用此方法上的表示......如果我再次调用该方法,则返回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?
}

如果我“做错了”,那么我会接受任何建议,我怎么能得到这些数据。

有帮助吗?

解决方案

的Javadoc解释这样的:

  

的表示的内容可以是   检索了几次,如果有一个   稳定的和可访问的来源,如   本地文件或字符串。当。。。的时候   表示通过获得   临时源等的网络   插座,其内容只能是   检索一次。

所以推测它被直接从网络或类似的东西读取。

您可以通过调用isTransient()检查。如果您需要能够多次读它,想必你应该把它转换成字符串,然后创建从该字符串的新Representation

其他提示

这是因为一般的表象实际上并没有得到从InputStream直到你问它的getText()读取,并且一旦你自找的,所有的字节被读取并转换成字符串。

这是对效率的自然实现:而不是创建一个潜在的非常大的字符串,然后将这个字符串变成有用的东西(JSON对象,一个DOM树,或其他),你写你的转换器上的InputStream的操作,而不是,避免制造和读取巨大字符串的成本。

因此,举例来说,如果你有一个大的XML文件被放入一个Web服务,可以喂InputStream的权成SAX解析器。

(如@约翰注释,StringRepresentation包装一个String,所以可以多次读取,但你必须读请求的代表性,这是最有可能的InputRepresentation。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top