Различие между java.io. PrintWriter и java.io. BufferedWriter?

Использование некоторое программное обеспечение с открытым исходным кодом, как . Наверняка существуют ошибки, и Вам будет нужно в том, что еще не там или находится на рассмотрении исправление ошибки. Это происходит все время.:)

, Если Вы расширяетесь/настраиваете версию с открытым исходным кодом тогда, необходимо поддержать ее. Теперь приложение, которое является, предполагает для помощи Вам с тестированием , денежные заявки подающего станут нагрузкой для поддержки.

90
задан Tom Cammann 14 January 2013 в 15:27
поделиться

4 ответа

Справочник по API для BufferedWriter и PrintWriter подробно описывает различия.

Основная причина использования PrintWriter - получить доступ к printXXX такие методы, как println (). По сути, вы можете использовать PrintWriter для записи в файл точно так же, как вы использовали бы System.out для записи в консоль.

BufferedWriter - это эффективный способ записи в файл (или что-либо еще), поскольку он буферизует символы в памяти Java перед (возможно, в зависимости от реализации) переходят на C для записи в файл.

Не существует такого понятия, как «PrintReader»; ближайший к вам, вероятно, java.util.Scanner .

56
ответ дан 24 November 2019 в 07:04
поделиться

Я удивлен, что никто еще не предложил использовать настоящий FlowDocument для создания пользовательского интерфейса.

Я использовал FlowDocument раньше, чтобы добиться сложных договоренностей. Он работает достаточно хорошо, за исключением того, что наследование некоторых свойств блокируется (например, TextElement.FontSize ). Это несложно обойти.

В вашем случае просто разделите №2 на отдельный UserControl для каждого раздела, а внутри вашего FlowDocument используйте InlineUIContainer для обертывания каждого раздела.

<Window>
  <DockPanel>
    ... toolbars, etc ...

    <FlowDocumentScrollViewer ...>
      <FlowDocument>
        ...
         <InlineUIContainer>
           <my:PartialNumberTwo DataContext="{Binding ...}" />
         </InlineUIContainer>
        ...

Конечно, есть ограничения на то, что FlowDocument может сделать, поэтому он может не сработать для вашего сценария.

Чрезвычайно гибкий вариант - создать настраиваемую панель, которая размещает свои дочерние элементы в стиле WrapPanel, но делает это путем подгонки прямоугольников, и перед запуском она отмечает любую перекрывающуюся область панелью ' но самое важное (и тревожное) отличие, о котором следует помнить, заключается в том, что он проглатывает исключения .

Вы можете позже вызвать checkError , чтобы узнать, произошли ли какие-либо ошибки, но обычно вы бы использовали PrintWriter для таких вещей, как запись в консоль - или в "быстрых и грязных" приложениях, где вы не хотите, чтобы вас беспокоили исключения (и где долгосрочная надежность не является проблема).

Я не уверен, почему аспекты «дополнительных возможностей форматирования» и «не принимать исключения» объединены в один и тот же класс - форматирование, очевидно, полезно во многих местах, где вы не хотят, чтобы исключения проглатывались. Было бы неплохо, если бы BufferedWriter в какой-то момент получил те же возможности ...

Вы можете позже вызвать checkError , чтобы узнать, произошли ли какие-либо ошибки, но обычно вы используете PrintWriter для таких вещей, как запись в консоль - или в "быстром" «грязные» приложения, в которых вы не хотите, чтобы вас беспокоили исключения (и где долгосрочная надежность не является проблемой).

Я не уверен, почему «дополнительные возможности форматирования» и «не проглатывают исключения» "аспекты объединены в один и тот же класс - форматирование, очевидно, полезно во многих местах, где вы не хотите, чтобы исключения проглатывались. Было бы неплохо, если бы BufferedWriter в какой-то момент получил те же возможности ...

Вы можете позже вызвать checkError , чтобы узнать, произошли ли какие-либо ошибки, но обычно вы используете PrintWriter для таких вещей, как запись в консоль - или в "быстром" «грязные» приложения, в которых вы не хотите, чтобы вас беспокоили исключения (и где долгосрочная надежность не является проблемой).

Я не уверен, почему «дополнительные возможности форматирования» и «не проглатывают исключения» "аспекты объединены в один и тот же класс - форматирование, очевидно, полезно во многих местах, где вы не хотите, чтобы исключения проглатывались. Было бы неплохо, если бы BufferedWriter в какой-то момент получил те же возможности ...

t
хочет, чтобы исключения проглатывались. Было бы неплохо, если бы BufferedWriter в какой-то момент получил те же возможности ...

t хочет, чтобы исключения проглатывались. Было бы неплохо, если бы BufferedWriter в какой-то момент получил те же возможности ...

84
ответ дан 24 November 2019 в 07:04
поделиться

Как сказано в ответе TofuBeer, оба имеют их специальности. Чтобы воспользоваться всеми преимуществами PrintWriter (или любого другого средства записи), но также использовать буферизованную запись, вы можете обернуть BufferedWriter необходимым следующим образом:

PrintWriter writer = new PrintWriter(
                         new BufferedWriter (
                             new FileWriter("somFile.txt")));
8
ответ дан 24 November 2019 в 07:04
поделиться

PrintWriter просто предоставляет методы печати на любом Writer в символьном режиме.

BufferedWriter более эффективен, чем в соответствии с его буферизованными методами. И он поставляется с методом newLine (), в зависимости от платформы вашей системы, для правильного управления текстовыми файлами.

BufferedReader позволяет читать текст из файла с байтами, преобразованными в символы. Он позволяет читать построчно.

PrintReader отсутствует, вам нужно выбрать другую реализацию Reader в соответствии с форматом вашего ввода.

7
ответ дан 24 November 2019 в 07:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: