首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >直接从web服务调用获取UTF8字符串,而无需转换为字符串

直接从web服务调用获取UTF8字符串,而无需转换为字符串
EN

Stack Overflow用户
提问于 2014-08-18 07:02:10
回答 2查看 87关注 0票数 1

我使用CXF来实现web服务服务器。

由于内存不足,所以我不希望web服务调用参数是翻译成UTF-16的字符串,而是访问原来的UTF-8缓冲区,在我的情况下通常只有一半大小。

所以如果我有一个网络方法:

代码语言:javascript
复制
void addBook(String bookText)  

如果没有CXF将其转换为java字符串,我如何获得bookText?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-18 12:47:47

Java中使用的XML解析器(用于CXF的StAX解析器)只允许以字符串或char[]的形式获取XML内容。因此,不可能获得原始字节。

票数 1
EN

Stack Overflow用户

发布于 2014-08-18 07:11:17

如果您在java中有一个String对象,那么它是UTF-8还是UTF-16字符串是不存在的。当您将String转换到字节数组或从字节数组转换时,编码就会出现。

java中的String是一个字符数组。如果java中已经有一个String对象(例如,作为参数传递给您的addBook()方法),那么它已经被正确地解释并转换为字符数组。

如果要避免字符编码转换,唯一的方法是定义方法来接收字节数组而不是String

代码语言:javascript
复制
void addBook(byte[] bookTextUtf16);

但请记住,以这种方式,您必须“记住”字节数组有效的编码(将其添加到名称中是一种方法)。

如果您需要一个java.lang.String对象,那么您就什么也做不了。String是一个字符数组,每个字符都是一个16位值.这是String内部,无法更改内部表示形式。要么接受这一点,要么不使用java.lang.String来表示您的字符串。

另一种方法可以是创建您自己的Text类--例如,它使用UTF-8编码的字节数组,并且只要您不需要String表示,就将它保持为字节数组,并在需要时存储它。只有在需要java.lang.String时才创建String实例。

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

https://stackoverflow.com/questions/25357853

复制
相关文章

相似问题

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