Есть ли Null OutputStream в Java? - PullRequest
100 голосов
/ 28 марта 2009

Мне нужно указать OutputStream для API, который я использую, но на самом деле мне не нужен вывод. Имеет ли Java OutputStream эквивалент > /dev/null?

Ответы [ 10 ]

106 голосов
/ 28 марта 2009
/**Writes to nowhere*/
public class NullOutputStream extends OutputStream {
  @Override
  public void write(int b) throws IOException {
  }
}
61 голосов
/ 28 марта 2009

Java не кажется, но Apache Commons IO делает. Взгляните на следующее:

https://commons.apache.org/proper/commons-io/javadocs/api-2.5/org/apache/commons/io/output/NullOutputStream.html

Надеюсь, это поможет.

38 голосов
/ 22 мая 2012

Пока не упоминается, поэтому я также добавлю Гуава ByteStreams . nullOutputStream () , как некоторые могут предпочитаю Guava, а не Apache Commons IO или уже включил его в свой проект.

Примечание: Если вы используете более старую версию Guava (от 1.0 до 13.0), вы хотите использовать com.google.io.NullOutputStream .

14 голосов
/ 28 марта 2009

Перефразировка уже предоставленных ответов -

Java не имеет NullOutputStream класса. Однако вы можете бросить свой собственный OutputStream, который игнорирует любые записанные в него данные - другими словами, write(int b), write(byte[] b) и write(byte[] b, int off, int len) будут иметь пустые тела методов. Это то, что делает класс Common IO NullOutputStream.

5 голосов
/ 04 октября 2018

Начиная с Java 11, есть статическая утилита, которая делает именно то, что вам нужно, статический фабричный метод OutputStream.nullOuputStream():

Возвращает новый OutputStream, который отбрасывает все байты. Возвращенный поток изначально открыт. Поток закрывается путем вызова метода close (). Последующие вызовы close () не имеют никакого эффекта.

3 голосов
/ 28 марта 2009

Нет, но это довольно легко реализовать.

См. Этот вопрос «Как удалить System.out.println из кодовой базы»

И тогда вам просто нужно:

System.setOut( DevNull.out );

Или что-то в этом роде:)

System.setOut (PrintStream)

3 голосов
/ 28 марта 2009

Не входит в стандартную библиотеку AFAIK, но создать ее, переопределив запись в OutputStream, не составит труда.

1 голос
/ 25 ноября 2018

В городе есть новый мальчик, который заботится об этом, как обаяние, только несколько строк кода должны работать. Его JDK 11 и nullWriter () были введены там, что заботится об этом. Вот код для решения той же старой проблемы, новый способ, не беспокоясь об операционной системе (ОС).

String fileContent = "Welcome to StackOverflow readers !! Here goes the question link...";
Writer writer = Writer.nullWriter();
writer.write(fileContent);
writer.close();

Надеюсь, это кому-нибудь поможет!

0 голосов
/ 10 сентября 2014

Я считаю, что это то, что вы ищете, я искал то же самое: Это для перенаправления выходных потоков из стандартной ошибки, стандартной в объектах ProcessBuilder.

Blockquote

pb.redirectError( ProcessBuilder.Redirect.appendTo( new File( "NUL:" ) ) );
  • Дом
0 голосов
/ 01 октября 2013

ByteArrayOutputStream - это то, что вы хотите (при условии, что API будет выводить текст). Просто создайте новый экземпляр.

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