使用 UTF-16LE 编码将 String 快速转换为 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
。例如,这是其中之一:
//
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));
我需要使用这个获取数百万字节的字符串:
String str="blablabla...."; // some UTF-16LE encoding string extracted from DB
bytes=str.getBytes("UTF-16LE")
但这非常慢。 getBytes
有自定义的快速版本,但它们不支持 UTF-16LE
。例如,这是其中之一:
//
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));