繁体   English   中英

使用UTF-16LE编码将字符串快速转换为byte []

[英]Fast conversion of String to byte[] using UTF-16LE encoding

我需要使用以下命令获取数百万个字符串的字节:

String str="blablabla...."; // some UTF-16LE encoding string extracted from DB
bytes=str.getBytes("UTF-16LE")

但这太慢了 有一些getBytes自定义快速版本,但它们不支持UTF-16LE 例如,这是其中之一:

// http://stackoverflow.com/questions/12239993/why-is-the-native-string-getbytes-method-slower-than-the-custom-implemented-getb
private static byte[] getBytesFast(String str) {
    final char buffer[] = new char[str.length()];
    final int length = str.length();
    str.getChars(0, length, buffer, 0);
    final byte b[] = new byte[length];
    for (int j = 0; j < length; j++)
        b[j] = (byte) buffer[j];
    return b;
}

是否有类似的快速解决方案,可以使用UTF-16LE编码将Java字符串转换为字节数组?

此版本将产生UTF16LE字节数组:

private static byte[] getBytesUTF16LE(String str) {
    final int length = str.length();
    final char buffer[] = new char[length];
    str.getChars(0, length, buffer, 0);
    final byte b[] = new byte[length*2];
    for (int j = 0; j < length; j++) {
        b[j*2] = (byte) (buffer[j] & 0xFF);
        b[j*2+1] = (byte) (buffer[j] >> 8);
    }
    return b;
}

测试:

String test = "UTF16 Ελληνικά Русский 日本語";
byte[] bytes = test.getBytes("UTF-16LE");
byte[] bytes2 = getBytesUTF16LE(test);
System.out.println(Arrays.equals(bytes, bytes2));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM