readLine() возвращает строку, но мне нужны символы ASCII символов каждой строки в каждой строке.
Например.
ABCDE XYZ
Мне нужны символы ASCII A, B, C, D, E, а также X, Y, Z, но отдельно. В настоящее время я использую метод BufferedReaderreadLine, затем перебираю длину строки и использую String.charAt() для извлечения символа в каждой позиции. Преобразование символов в байты становится тривиальным делом.
Я решил, что создавать строки из байтов, а затем преобразовывать их обратно в байты, должно быть дорого. Я попробовал написать собственное решение с использованием FileChannel:
FileChannel f = FileChannel.open(Paths.get("file.txt"));
ByteBuffer buffer = ByteBuffer.allocate(10000);
bytesRead = 0;
byte[] chunk = new byte[10000];
while (bytesRead != -1) {
bytesRead = f.read(buffer);
buffer.flip();
while (buffer.hasRemaining()) {
buffer.get(chunk, 0, bytesRead);
processChunk(chunk);
}
buffer.clear();
}
Не знаю почему, но это оказалось медленнее, чем метод BufferedReaderreadLine().
Я нашел этот ответ: Почему производительность BufferedReader намного хуже, чем BufferedInputStream?, и мне было интересно, может ли BufferedInputStream помочь мне.
При этом скорость имеет первостепенное значение!
Да извините, я имел ввиду числовые коды.
@VGR Итак, я попытался использовать BIS, и у меня появляется TLE на странице отправки задания (онлайн-оценщик). repl.it/repls/FloralwhiteIdenticalAtoms Кажется, что readLine () BufferedReader все еще намного быстрее для чтения строк. Есть ли способ прочитать строку (до символа новой строки) без предварительного построения из нее строки, потому что в конечном итоге мне нужны байты, а не строковое представление?
Не используйте строки вообще. Просто считывайте байты один за другим из InputStream, пока не получите байт, значение которого равно -1 или 10 (значение кодовой точки \n).




Я не уверен, что означает «символы ASCII A, B, C, D, E», поскольку ABCDE уже являются символами ASCII. Возможно, вы имели в виду ASCII коды этих символов как байтовые значения? Возможно, вам стоит просто прочитать их из BufferedInputStream?