div.main {margin-left: 20pt; margin-right: 20pt}Преобразование char <->
byte
Многие программисты используют преобразования между различными
типами данных в Java. А именно преобразование char и byte. Такие преобразования
могут использоваться к примеру для передачи текстовых данных, через поток,
конвертация кодировок или для каких-то еще целей.
Но не все знают, что такие преобразования могут происходить разное
время. Причем разница может доходить до разов.
Для выснения более-менее ясной картины создан тест. В этом
тесте производится перекодировка текстовой строки (находящейся в "нативной" Java
кодировке Unicode) в одну из 8-и кодировок (Unicode, UTF16, UTF8, koi8-r,
windows-1251, cp866, iso8859-1, ASCII). Конкретно, в начале производится
перекодировка в одну из указанных кодировок, а затем обратно в Unicode. Каждая
кодировка обрабатывается 100000 раз.
Посмотрим результаты - чем меньше значение, тем быстрее
обрабатывался результат. Первое значение - получение массива байтов из строки,
второе значение - получение строки из массива байтов полученного при генерации
перовго результат. Обе процедуры используют одну из "кодировок" для
конвертации.
Как видно из результатов, разница между кодированием туда и
кодированием обратно может превышать разы. Коме того, разные кодировки требуют
разного времени на обработку. В таблице одним цветом выделены результаты
полученные на одном оборудовании.
Результаты
OS/Hardware |
JVM |
Unicode |
UTF16 |
UTF8 |
KOI8-r |
WIN-1251 |
CP866 |
ISO |
ASCII |
- |
- |
8531/484 |
6641/6546 |
516/484 |
6157/5875 |
6125/5766 |
6046/5797 |
6047/5844 |
360/265 |
- |
Sun HotSpot Client 1.4.0-beta |
5007/361 |
3705/3786 |
1001/1102 |
3625/3505 |
3705/3596 |
3585/3455 |
3625/3525 |
12919/610 |
OS/2 |
JDK 1.1.8 IBM JIT |
1781/1742 |
-/- |
1554/1696 |
1883/1657 |
1774/1828 |
1594/1515 |
1930/1539 |
1633/1390 |
OS/2 |
J2RE 1.3.0 IBM |
3945/547 |
2046/2024 |
500/547 |
1914/1711 |
1711/1743 |
1867/1687 |
1781/1711 |
367/282 |
WinNT4.0 sp6 Cel333/128 |
Sun 1.2.2 SymJIT |
31795/26448 |
-/- |
4737/5638 |
14091/15342 |
13499/14321 |
11426/11827 |
14531/14471 |
2433/2524 |
WinNT4.0 sp6 Cel333/128 |
Sun 1.2.2 JRE SymJIT |
29232/23544 |
-/- |
4577/3495 |
14260/15241 |
15102/13389 |
11397/11426 |
14421/13159 |
3695/2814 |
PenIII500/128 |
Sun 1.3.0 HotSpot Client |
6029/300 |
4777/4707 |
391/340 |
4587/4436 |
4637/4406 |
4577/4406 |
4537/4356 |
260/180 |
PenIII500/128 |
J2RE 1.3.0 IBM Jitc |
2994/371 |
1552/1743 |
430/441 |
1412/1302 |
1412/1302 |
1402/1261 |
1573/1272 |
310/210 |
PenIII500/128 |
MS JView 1.1.4 |
3916/3455 |
-/- |
3355/3445 |
-/- |
73716/72605 |
-/- |
-/- |
2944/3004 |
|