首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ByteArrayOutputStream到CharBuffer

ByteArrayOutputStream到CharBuffer
EN

Stack Overflow用户
提问于 2009-05-06 20:12:32
回答 3查看 5K关注 0票数 0

我有一个输入ByteArrayOutputStream,需要将其转换为CharBuffer。

我试图避免创建新的字符串。有没有办法做到这一点。

我正在尝试执行以下操作,但我没有字符串的编码,因此下面的代码将无法工作(无效输出)。

代码语言:javascript
复制
ByteBuffer byteBuffer = ByteBuffer.wrap(byteOutputStream.toByteArray());
CharBuffer document = byteBuffer.asCharBuffer();
EN

回答 3

Stack Overflow用户

发布于 2009-05-06 20:16:41

您必须提供一种编码。类应该如何知道如何转换。在写入ByteOutputStream或完全避免流之前,您不能确定编码吗?如果没有,你必须做一些假设,并且可能会失败。

通过提供编码,您可以将字节缓冲区转换为字符缓冲区

代码语言:javascript
复制
Charset charset = Charset.forName("ISO-8859-1");
CharsetDecoder decoder = charset.newDecoder();
CharBuffer charBuffer = decoder.decode(yourByteBuffer);
票数 2
EN

Stack Overflow用户

发布于 2009-05-06 21:07:50

ByteBuffer.asCharBuffer给你一个非常字面上的两个bytes to char (大端或小端),更新反映在两个缓冲区中。

您可能希望通过一些合理的编码从bytes转换到chars。有很多方法可以做到这一点。例如新字符串(byte[],字符串编码)。大多数情况下,它们会以某种形式通过CharsetEncoder。那么从那里获取一个CharBuffer应该是很简单的。

CharBuffer是一种相当低级的东西。你确定这真的是你想要的吗?

1:http://file:///C:/Users/tackline/sun/docs/api/java/lang/String.html#String(byte[]

票数 0
EN

Stack Overflow用户

发布于 2009-05-06 21:11:28

ByteBuffer.asCharBuffer()假设字节为UTF-16。(我在文档中找不到明确说明这一点的任何内容,但实现只是将字节对视为字符的低字节和高字节。)如果您需要另一种编码,则必须使用不同的方法。

最简单的方法是只创建一个String

代码语言:javascript
复制
CharBuffer document = CharBuffer.wrap(byteOutputStream.toString(encoding));

我知道您说过您“试图避免创建新的字符串”,但是您的代码片段还是分配了一个单独的字节数组(根据文档,ByteArrayOutputStream.toByteArray()“创建了一个新分配的字节数组”)。因为CharBuffer支持随机访问,并且许多编码(特别是UTF-8)是可变宽度的,所以最好还是先把整个代码转换成字符。

如果您真的只想对字符进行流式访问(而不是随机访问),那么对于底层代码来说,CharBuffer可能不是最好的接口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/831511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档