使用Writer时设置内容长度?

时间:2015-03-10 09:37:40

标签: java servlets

我正在研究一些响应包装器。使用OutputStream时,我可以确定字节数。但是,当使用Writer时,我将内容缓冲为char[],稍后将用于写入输出。

这是一个有点noobie的问题,但如何确定使用char[]时的实际内容长度(我想设置标题 - 我知道我不必,但我想要) ?我的意思是,我可以使用使用的编码将字符转换为字节,然后刷新字节,但是想跳过另一个转换。

还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

这取决于您使用的字符编码:

  • 如果您使用的是8位编码(例如Latin-1),并且只有可转换的可映射字符,则字符数与字节数相同。

  • 否则,技术上可以计算字符流将编码到 1 的字节数,但是没有简单的和高效的方式要做到这一点。


  

是的,但这是一个重点,我不知道前面的编码,用户可能会使用任何东西。除了转换为byte []之外,我没有看到任何其他实用的方法 - 这可能发生在引擎盖下,我猜。

实际上,应该很容易分辨出编码是什么。在响应包装器上调用getCharacterEncoding()。如果在调用getWriter之后执行此操作,那么它将是用于创建编写器的编码。 (至少,这就是javadocs所暗示的......)


1 - 例如,使用UTF-8,您首先要实现char值到Unicode代码点的映射,然后计算编码每个代码点所需的字节数。这可以在不复制等的情况下完成,但您需要从头开始编写代码......除非您能找到执行此操作的第三方库。