所以, 我正在尝试使用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?
}
如果我“做错了”,那么我愿意接受有关如何获取数据的任何建议。
答案 0 :(得分:4)
javadocs解释了这一点:
表示的内容可以是 如果有的话,检索几次 稳定和可访问的来源,如a 本地文件或字符串。当。。。的时候 表示通过a获得 像网络一样的临时来源 socket,其内容只能是 检索一次。
所以可能是直接从网络或类似的东西中读取它。
您可以致电isTransient()
进行检查。如果您需要能够多次读取它,可能您应该将其转换为字符串,然后从该字符串中创建一个新的Representation
。
答案 1 :(得分:2)
这是因为一般情况下,表示实际上并没有从InputStream读入,直到你用getText()请求它,一旦你要求它,所有的字节都被读取并转换成字符串。
这是效率的自然实现:不是创建一个可能非常大的String,然后将该String转换为有用的东西(JSON对象,DOM树或其他),而是编写转换器以对InputStream进行操作,避免制作和阅读巨大字符串的成本。
因此,例如,如果您将大型XML文件PUT转换为Web服务,则可以将InputStream直接提供给SAX解析器。
(正如@John所说,StringRepresentation包装了一个String,因此可以多次读取。但是你必须读取一个Request的表示,这很可能是一个InputRepresentation。)