Вопрос

Я читаю из входного потока сокета. Поскольку я анализирую входящие данные на лету, я должен читать символ по персонажу.

Делает BufferedReader.read() то же самое, что InputStream.read() делает ? (Предполагая, что BufferedReader был построен с входным потоком в качестве основания)

Более эффективно использовать inputstream.read () при чтении каждого символа отдельно? Или есть лучший способ?

Это было полезно?

Решение

BufferedReader будет читать несколько символов из базового читателя. Входная сеть предоставляет байты. Таким образом, они работают над двумя различными датами. Как вы обертываете читателя по потоку? Предположительно, вы делаете что -то вроде:

 BufferedReader in
   = new BufferedReader(new InputStreamReader(socket));

В этом случае я был бы осторожен, чтобы указать кодирование вашего персонажа.

С точки зрения оптимизации, было бы лучше использовать BufferedReader, так как он будет читать несколько килобайт одновременно, и вы можете взять каждого персонажа, когда захотите (не обязательно вынуждение нового прочтения IO).

Другие советы

read () Метод класса InputStream является абстрактным методом. Думаю, это должен быть inputstreamrreader. Возвращаясь к вашему вопросу, как read () метод inputStreamReader, так и класса BufferesReader, сделайте одно и то же- верните значение ASCII символа, единственное отличие- буферизатор, использующий так называемое буферизацию, которая позволяет нам уменьшать, как часто мы читаем из Диск/stdin, копируя куски в основную память, когда использование InputStreamReader Каждое вызов read () может привести к чтению байтов с диска/stdin, преобразован в символы, а затем возвращается, что может быть очень неэффективным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top