我正在使用JAXB
,我需要知道生成的XML的长度,因此我将内容封送到StringWriter
,以便更好地获取长度:
aStringWriter.getBuffer().length();
or
aStringWriter.toString().length();
?
答案 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字符串。