how to avoid memory wastage when storing UTF-8 characters (8 bit) in Java character (16 bit). two in one?

I'm afraid I have a question on a detail of a rather oversaturated topic, I searched aroudn a lot, but couldn't find a clear answer to that specific obvious -imho- important, problem:

When converting byte[] to String using UTF-8, each byte (8bit) becomes a 8 bit character encoded by UTF-8, but each UTF-8 character is saved as a 16 bit character in java. Is that correct? Если да, то это означает, что каждый тупой символ Java использует только первые 8 бит и потребляет вдвое больше памяти? Это тоже правильно? Интересно, насколько приемлемо такое расточительное поведение…

А разве нет какой-нибудь хитрости, чтобы получить псевдостроку, которая является 8-битной? Действительно ли это приведет к меньшему потреблению памяти? Или, может быть, есть способ сохранить> два

спасибо за любые ответы, устраняющие путаницу ...

РЕДАКТИРОВАТЬ: привет, спасибо всем за ответ. Мне было известно о свойстве переменной длины UTF-8. Однако, поскольку мой источник - это 8-битный байт, я понял (по-видимому, ошибочно), что ему нужны только 8-битные слова UTF-8. Действительно ли преобразование UTF-8 сохраняет странные символы, которые вы видите, когда в интерфейсе командной строки вы выполняете команду «cat somebinary»? Я думал, что UTF-8 просто каким-то образом использовался для сопоставления каждого из возможных 8-битных слов байта с одним конкретным 8-битным словом UTF-8. Неправильно? Я думал об использовании Base64, но это плохо, потому что он использует только 7 бит ...

вопросы переформулированы: есть ли более умный способ преобразовать байт в нечто String? Возможно, самым любимым было преобразование byte [] в char [], но тогда у меня все еще остались 16-битные слова.

дополнительная информация о сценарии использования:

Я адаптирую Jedis (клиент Java для NoSQL Redis) в качестве «примитивного уровня хранения» для HypergraphDB. Итак, джедаи - это база данных для другой «базы данных». Моя проблема в том, что я должен постоянно кормить джедаев данными byte [], но внутри> Redis в целом и использовать этот Filteroutputstream ...?)

Теперь мне интересно: если бы мне пришлось постоянно преобразовывать байты [] и String, с размерами данных от очень маленьких до потенциально очень больших , разве Есть ли огромная трата памяти, чтобы каждый 8-битный символ передавался в java как 16-битный?

6
задан Peter Lawrey 12 April 2016 в 08:19
поделиться