2015-05-14 2 views
2

Мне нужно, чтобы получить байт миллионов строки с помощью этого:Быстрое преобразование строки в байт [] с помощью кодировки UTF-16LE

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; 
} 

Есть ли аналогичный быстрое решение преобразовать строку Java в массив байтов в кодировке UTF-16LE?

+2

Так вы спрашиваете, если существует более быстрое решение? – Maroun

+0

@MarounMaroun, кажется, так как мой ответ был принят. Я редактировал вопрос. –

ответ

3

Эта версия будет производить 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)); 
+0

Подтверждено, работает правильно, спасибо. – AVEbrahimi

Смежные вопросы