Это разумно для многих наборов символов.Есть еще несколько, которые не могут вписаться в Юникод, но не много.
Сначала помните, что байты не являются символами, для работы с символами вам необходимо преобразовать их, и, как правило, самый простой способ сделать этообернуть поток байтов в считыватель (или записывающее устройство), созданный с соответствующим набором кодирования / декодирования.
Для списка непосредственно поддерживаемых кодировок вот что поставляется с JVM .
Ключ не в том, чтобы использовать устройства чтения и записи по умолчанию, так как они используют кодировку платформы.Вместо этого выберите одну кодировку.UTF-8 хорош по размеру диска, плох по производительности кодирования / декодирования;в то время как UTF-32 ужасен по размеру диска и превосходен по производительности кодирования / декодирования.UTF-16 - это что-то вроде компромисса.Все кодировки на основе UTF оптимизированы для более эффективной обработки символов ASCII, поэтому UTF-8 может превзойти UTF-16, если вы имеете дело только с ASCII.
Обратите внимание, что вы не можете преобразовать байты в новый набор символов,они "приводятся" к новому набору символов.Это означает, что если вы хотите преобразовать байты в новый набор символов, вы должны превратить их в строки или символы и получить байты строки в новом наборе символов.
Один способ прочитать поток байтов какInputStream с вашим собственным указанным набором символов должен использовать InputStreamReader, созданный с альтернативным набором символов .Точно так же вам нужно использовать OutputStreamWriter, созданный с альтернативным набором символов.
Все файлы, которыми вы не управляете напрямую, должны использовать набор символов платформы (так как это, вероятно, так и будет) и преобразовываться ввыбор набора символов при сохранении или вводе в программу.