Что является более быстрой альтернативой методу readLine () в BufferedReader? - PullRequest
0 голосов
/ 18 октября 2018

readLine() возвращает строку, но мне нужны ASCII символы символов каждой строки в каждой строке.

Например

ABCDE XYZ

Мне нужны символы ASCII A, B, C, D, E, а также X, Y, Z, но отдельно.В настоящее время я использую метод BufferedReader readLine, затем перебираю длину строки и использую 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();
        }

Я не знаю почему, но оказалось, что это медленнее, чем BufferedReader readLine() метод.

Я нашел ответ: Почему производительность BufferedReader намного хуже, чем BufferedInputStream? , и мне было интересно, может ли BufferedInputStream помочь мне.

Скорость имеет первостепенное значение для этого!

...