Вам действительно нужен только div, как у вас сейчас есть.
Посмотрите на фрагмент. Вам нужно будет измерить точный размер шрифта и семейство шрифтов. Это хорошее начало.
#rcorners1 {
border-radius: 25px;
background: #73AD21;
width: 200px;
height: 150px;
text-align: center;
padding: 38px 0;
box-sizing: border-box;
font-size: 30px;
background: -moz-linear-gradient(top, #77b26d 0%, #ffffff 55%, #ffffff 57%, #77b26d 100%);
/* FF3.6-15 */
background: -webkit-linear-gradient(top, #77b26d 0%, #ffffff 55%, #ffffff 57%, #77b26d 100%);
/* Chrome10-25,Safari5.1-6 */
background: linear-gradient(to bottom, #77b26d 0%, #ffffff 55%, #ffffff 57%, #77b26d 100%);
/* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#77b26d', endColorstr='#77b26d', GradientType=0);
/* IE6-9 */
}
<div class="container">
<p id="rcorners1">JAN<br/>2015</p>
</div>
Имя кодировки «UTF-16» всегда будет кодироваться с помощью спецификации и декодировать данные с использованием либо большого / малого порядка байтов, но «UnicodeBig» и «UnicodeLittle» полезны для кодирования в определенных порядок байтов. Используйте UTF-16LE или UTF-16BE без спецификации - см. Этот пост , чтобы узнать, как использовать "\ uFEFF" для обработки спецификаций вручную. См. здесь для канонического наименования имен строк кодировки или (предпочтительно) класса Charset . Также обратите внимание, что только ограниченное подмножество кодировок абсолютно необходимо для поддержки.
Вот как вы это делаете в nio:
return Charset.forName("UTF-16LE").encode(message)
.put(0, (byte) 0xFF)
.put(1, (byte) 0xFE)
.array();
Это, безусловно, должно быть быстрее, но я не знаю, сколько массивов он делает скрытыми, но мое понимание суть API в том, что он должен минимизировать это.
Во-первых, для декодирования вы можете использовать набор символов «UTF-16»; который автоматически определяет начальную спецификацию. Для кодирования UTF-16BE вы также можете использовать набор символов «UTF-16» - который будет писать правильную спецификацию, а затем выводить материал с прямым порядком байтов.
Для кодирования с прямым порядком байтов с помощью спецификации я не думаю ваш текущий код слишком плох, даже с двойным распределением (если только ваши строки действительно чудовищны). Что вы можете сделать, если они есть, - это иметь дело не с байтовым массивом, а скорее с java.nio ByteBuffer, и использовать класс java.nio.charset.CharsetEncoder. (Его можно получить из Charset.forName ("UTF-16LE"). NewEncoder ()).
даже с двойным распределением (если только ваши строки действительно чудовищны). Что вы можете сделать, если они есть, - это иметь дело не с байтовым массивом, а скорее с java.nio ByteBuffer, и использовать класс java.nio.charset.CharsetEncoder. (Его можно получить из Charset.forName ("UTF-16LE"). NewEncoder ()). даже с двойным распределением (если только ваши строки действительно чудовищны). Что вы можете сделать, если они есть, - это иметь дело не с байтовым массивом, а скорее с java.nio ByteBuffer, и использовать класс java.nio.charset.CharsetEncoder. (Его можно получить из Charset.forName ("UTF-16LE"). NewEncoder ()). ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(string.length() * 2 + 2);
byteArrayOutputStream.write(new byte[]{(byte)0xFF,(byte)0xFE});
byteArrayOutputStream.write(string.getBytes("UTF-16LE"));
return byteArrayOutputStream.toByteArray();
РЕДАКТИРОВАТЬ: перечитывая ваш вопрос, я вижу, что вы предпочли бы вообще избежать двойного распределения массива. К сожалению, насколько мне известно, API этого не дает. (Был метод, но он устарел, и вы не можете указать с его помощью кодировку.)
Я написал выше до того, как увидел ваш комментарий, я думаю, что ответ на использование классов nio находится на правильном пути. Я смотрел на это, но я недостаточно знаком с API, чтобы знать, как это сделать.