代码之家  ›  专栏  ›  技术社区  ›  DigitalZebra

为什么我只能在RESTlet中将表示转换为字符串一次?

  •  1
  • DigitalZebra  · 技术社区  · 15 年前

    我正在尝试使用getText()或write()方法将表示转换为String或StringWriter。似乎我只能在表示上成功调用此方法一次。。。如果我再次调用该方法,它将在第二次调用时返回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?
    }
    

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

    2 回复  |  直到 15 年前
        1
  •  4
  •   Jon Skeet    15 年前

    javadocs对此进行了解释:

    表示的内容可以是 如果存在 稳定和可访问的源,如 本地文件或字符串。当 表示是通过 像网络一样的临时来源 检索一次。

    所以推测它是直接从网络或类似的地方读取的。

    isTransient() . 如果您需要能够多次读取它,那么您应该将它转换为字符串,然后创建一个新的 Representation

        2
  •  2
  •   Jim Ferrans    15 年前

    这是因为一般来说,只有在使用getText()请求时,表示才会从InputStream读入,一旦请求,所有字节都会被读取并转换为字符串。

    因此,例如,如果您有一个大的XML文件被放入web服务中,您可以将InputStream直接输入到SAX解析器中。