我使用CXF来实现web服务服务器。
由于内存不足,所以我不希望web服务调用参数是翻译成UTF-16的字符串,而是访问原来的UTF-8缓冲区,在我的情况下通常只有一半大小。
所以如果我有一个网络方法:
void addBook(String bookText) 如果没有CXF将其转换为java字符串,我如何获得bookText?
发布于 2014-08-18 12:47:47
Java中使用的XML解析器(用于CXF的StAX解析器)只允许以字符串或char[]的形式获取XML内容。因此,不可能获得原始字节。
发布于 2014-08-18 07:11:17
如果您在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实例。
https://stackoverflow.com/questions/25357853
复制相似问题