我正在使用CXF来实现Web服务服务器
由于内存不足,我不希望将Web服务调用参数转换为UTF-16字符串,而是访问原始的UTF-8缓冲区,在我的情况下,这些缓冲区的大小通常只有一半。
所以,如果我有一个网络方法:
void addBook(String bookText)
如何在没有CXF的情况下将bookText转换为java字符串?
答案 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
实例。