在StringWriter中获取String长度?

时间:2010-09-19 06:37:24

标签: java jaxb

我正在使用JAXB,我需要知道生成的XML的长度,因此我将内容封送到StringWriter,以便更好地获取长度:

aStringWriter.getBuffer().length();
 or

aStringWriter.toString().length();

2 个答案:

答案 0 :(得分:4)

编辑:调用toString()将始终创建一个新字符串...虽然它不需要复制实际的字符数据,但只需创建一个引用当前char[]的新字符串长度和数量。调用getBuffer().length()不需要创建任何额外的对象,因此效率稍高。

你在做什么输出?你不是要把它转换成字符串吗?

请注意,此处的长度始终为字符中的长度,因此它不适用于HTTP响应的Content-Length标头,它需要< em> bytes (即编码后)。

编辑:好的,如果你想要字节数,我建议你创建一个ByteArrayOutputStream,如果可以的话(或者我忘记了API的样子)或者直接将它传递给JAXB,或者创建一个OutputStreamWriter围绕着它。这样,您可以从ByteArrayOutputStream获取二进制长度。

答案 1 :(得分:1)

我这样做

Charset UTF8Charset = Charset.forName("UTF8");
String output = stringWriter.toString();
response.setContentType("application/xml");
response.setContentLength(output.getBytes(UTF8Charset).length);
PrintWriter out = response.getWriter();
out.print(output);

适用于所有UTF-8字符串。