直接从Web服务调用获取UTF8字符串而不转换为String

时间:2014-08-18 07:02:11

标签: java string web-services cxf

我正在使用CXF来实现Web服务服务器 由于内存不足,我不希望将Web服务调用参数转换为UTF-16字符串,而是访问原始的UTF-8缓冲区,在我的情况下,这些缓冲区的大小通常只有一半。
所以,如果我有一个网络方法:

void addBook(String bookText)  

如何在没有CXF的情况下将bookText转换为java字符串?

2 个答案:

答案 0 :(得分:1)

Java中使用的XML解析器(用于CXF的StAX解析器)仅允许将XML内容作为String或char []获取。因此,无法获得原始字节。

答案 1 :(得分:0)

如果你在java中有一个String对象,那就没有UTF-8或UTF-16字符串。将String转换为字节数组或从字节数组转换时,编码就会出现。

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

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

void addBook(byte[] bookTextUtf16);

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

如果您需要一个java.lang.String对象,那么您无能为力。 String是一个字符数组,每个字符都是16位值。这是String内部的,无法更改内部表示。接受此操作或不使用java.lang.String来表示您的字符串。

另一种方法可能是创建自己的Text类,例如以UTF-8编码的字节数组为例,只要您不需要String表示,请保持它作为一个字节数组并存储它,如果你想。仅在需要java.lang.String时才创建String实例。