Java: наиболее эффективный способ чтения из inputStream и записи в outputStream (плюс несколько модификаций) - PullRequest
1 голос
/ 02 февраля 2012

Я читаю из InputStream. и писать то, что я прочитал в outputStream.

Я также проверю несколько вещей. Например, если я читаю

& (амперсанд)

Мне нужно написать

"& amp;"

Мой код работает. Но теперь мне интересно, написал ли я самый эффективный способ (в чем я сомневаюсь).

Я читаю побайтово. (но это потому, что мне нужно делать странные изменения)

Может ли кто-нибудь, кто сделал это, предложить самый быстрый способ?

Спасибо

Ответы [ 3 ]

5 голосов
/ 02 февраля 2012

Если вы используете BufferedInputStream и BufferedOutputStream, то сделать это будет сложно.

Кстати, если вы обрабатываете ввод как символыв отличие от байтов, вы должны использовать читателей / писателей с BufferedReader и BufferedWriter.

1 голос
/ 02 февраля 2012

Код должен быть для чтения / записи символов с помощью Readers и Writers. Например, если он находится в середине последовательности UTF-8 или получает вторую половину символа UCS-2, и ему случается прочитать эквивалентное значение байта амперсанда, то он повредит данные, которые он пытается копировать. Код обычно живет дольше, чем вы ожидаете, и кто-то может попытаться поднять его позже и использовать в ситуации, когда это действительно может иметь значение.

Насколько быстрее или медленнее, использование BufferedReader, вероятно, поможет больше всего. Если вы пишете в файловую систему, BufferedWriter не будет иметь большого значения, потому что операционная система буферизует записи для вас, и это делает хорошую работу. Если вы пишете в StringWriter, то буферизация не будет иметь значения (может даже замедлить ее), но в противном случае буферизация ваших записей должна помочь.

Вы можете переписать его для обработки массивов; и это может сделать это быстрее. Вы все еще можете сделать это с массивами. Вам придется написать более сложный код для обработки граничных условий. Это также должно быть фактором при принятии решения.

Измеряйте, не угадывайте и остерегайтесь мнений людей, которые не проинформированы о всех деталях. В конечном счете, вам решать, достаточно ли это быстро для этой ситуации. Единого ответа нет, потому что все ситуации разные.

1 голос
/ 02 февраля 2012

Я бы предпочел использовать BufferedReader для чтения ввода и BufferedWriter для вывода. Использование регулярных выражений для сопоставления вашего ввода может сделать ваш код коротким, а также повысить сложность вашего времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...