Давайте предположим, что я только что использовал a BufferedInputStream
для чтения байтов текстового файла в кодировке UTF-8 в байтовый массив. Я знаю, что могу использовать следующую процедуру для преобразования байтов в строку, но есть ли более эффективный / более умный способ сделать это, чем просто перебирать байты и конвертировать каждый из них?
public String openFileToString(byte[] _bytes)
{
String file_string = "";
for(int i = 0; i < _bytes.length; i++)
{
file_string += (char)_bytes[i];
}
return file_string;
}
String fileString = new String(_bytes,"UTF-8");
?byte[]
в память и преобразование его черезnew String(_bytes,"UTF-8")
(или даже с помощью кусочков+=
в строке) является наиболее эффективным. Цепочки InputStreams и Readers могут работать лучше, особенно для больших файлов.Ответы:
Посмотрите на конструктор для String
А если вам лень, вы можете использовать библиотеку ввода-вывода Apache Commons для непосредственного преобразования InputStream в строку:
источник
java.nio.charset.Charset.availableCharsets()
все наборы символов, а не только наборы символов вStandardCharsets
. А если вы хотите использовать какой-то другой набор символов и по-прежнему хотите запретить создание конструктора String,UnsupportedEncodingException
вы можете использоватьjava.nio.charset.Charset.forName()
Класс Java String имеет встроенный конструктор для преобразования байтового массива в строку.
источник
Для преобразования данных utf-8 вы не можете предполагать соответствие 1-1 между байтами и символами. Попробуй это:
(Бах. Я вижу, что я слишком медленно нажимаю кнопку «Отправить ответ».)
Чтобы прочитать весь файл как строку, сделайте что-то вроде этого:
источник
Вы можете использовать
String(byte[] bytes)
конструктор для этого. Смотрите эту ссылку для деталей. РЕДАКТИРОВАТЬ Вы также должны учитывать кодировку по умолчанию вашей Plateform согласно документации Java:источник
Charset
аргументом, чтобы убедиться в правильности преобразования.Вы можете использовать методы, описанные в этом вопросе (особенно если вы начинаете с InputStream): чтение / преобразование InputStream в строку
В частности, если вы не хотите полагаться на внешние библиотеки, вы можете попробовать этот ответ , который читает
InputStream
через буферInputStreamReader
вchar[]
буфер и добавляет его вStringBuilder
.источник
Зная, что вы имеете дело с байтовым массивом UTF-8, вы определенно захотите использовать конструктор String, который принимает имя набора символов . В противном случае вы можете оставить себя открытыми для некоторых уязвимостей безопасности, связанных с кодировкой кодировки. Обратите внимание, что он бросает,
UnsupportedEncodingException
что вам придется обрабатывать. Что-то вроде этого:источник
Вот упрощенная функция, которая будет читать в байтах и создавать строку. Предполагается, что вы, вероятно, уже знаете, в какой кодировке находится файл (и по умолчанию).
источник
String имеет конструктор, который принимает byte [] и charsetname в качестве параметров :)
источник
Это также включает в себя итерации, но это намного лучше, чем объединение строк, поскольку они очень и очень дороги.
источник
String str = new String(byte[])
все будет хорошо.Почему бы не получить то, что вы ищете с самого начала, и прочитать строку из файла вместо массива байтов? Что-то вроде:
затем прочитайте LineIn, пока это не будет сделано.
источник
Я использую этот способ
String strIn = new String(_bytes, 0, numBytes);
источник