Есть ли нулевой выходной поток в Java?


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

9 95

9 ответов:

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

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

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

/**Writes to nowhere*/
public class NullOutputStream extends OutputStream {
  @Override
  public void write(int b) throws IOException {
  }
}

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

Примечание: если вы используете старую версию гуавы (от 1.0 до 13.0), вы хотите использовать ком.Гугл.Ио.NullOutputStream.

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

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

не в стандартной библиотеке AFAIK, но его не должно быть сложно создать, переопределив запись в OutputStream

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

посмотреть здесь "Как удалить систему.из.println из codebase тега"

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

System.setOut( DevNull.out );

или что-то подобное :)

.setOut (PrintStream)

начиная с Java 11, существует статическая утилита, которая делает именно то, что вам нужно, статический заводской метод OutputStream.nullOuputStream():

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

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

Blockquote

pb.redirectError( ProcessBuilder.Redirect.appendTo( new File( "NUL:" ) ) );
  • Dom

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