Мне нужно указать OutputStream
API, который я использую, но на самом деле мне не нужны выходные данные. Есть ли у Java OutputStream
эквивалент > /dev/null
?
Мне нужно указать OutputStream
API, который я использую, но на самом деле мне не нужны выходные данные. Есть ли у Java OutputStream
эквивалент > /dev/null
?
Ответы:
Начиная с Java 11, существует статическая утилита, которая делает именно то, что вам нужно, статический фабричный метод OutputStream.nullOutputStream()
:
Возвращает новый OutputStream, который отбрасывает все байты. Возвращенный поток изначально открыт. Поток закрывается путем вызова метода close (). Последующие вызовы close () не имеют никакого эффекта.
/**Writes to nowhere*/
public class NullOutputStream extends OutputStream {
@Override
public void write(int b) throws IOException {
}
}
OutputStream nullOutputStream = new OutputStream() { @Override public void write(int b) { } };
Кажется, что в Java нет, а в Apache Commons IO - нет. Взгляните на следующее:
Надеюсь, это поможет.
Это еще не упоминается, так что я буду также добавить гуавы «s ByteStreams . nullOutputStream () , поскольку некоторые могут предпочесть Guava над Apache Commons IO или уже имеют его в своем проекте.
Примечание. Если вы используете старую версию Guava (от 1.0 до 13.0), вы хотите использовать com.google.io.NullOutputStream .
Перефразируя уже предоставленные ответы -
В Java нет NullOutputStream
класса. Однако вы можете свернуть свой собственный, OutputStream
который игнорирует любые записанные в него данные - другими словами write(int b)
, write(byte[] b)
и write(byte[] b, int off, int len)
будет иметь пустые тела методов. Это то, что NullOutputStream
делает класс Common IO .
Нет, но это довольно просто реализовать.
См. Этот вопрос «Как удалить System.out.println из кодовой базы»
И тогда вам просто нужно:
System.setOut( DevNull.out );
Или что-то вроде того :)
В Java 11 добавлен OutputStream.nullOutputStream ()
В городе появился новый мальчик, который заботится об этом как обаяние, всего несколько строк кода должны работать. Здесь представлены его JDK 11 и nullWriter () , которые позаботятся об этом. Вот код для решения той же старой проблемы новым способом, не беспокоясь об операционной системе (ОС).
String fileContent = "Welcome to StackOverflow readers !! Here goes the question link...";
Writer writer = Writer.nullWriter();
writer.write(fileContent);
writer.close();
Надеюсь, это может кому-то помочь!
Я считаю, что это то, что вы ищете, я искал то же самое: это для перенаправления выходных потоков из стандартной ошибки, стандартной для объектов ProcessBuilder.
Цитата
pb.redirectError( ProcessBuilder.Redirect.appendTo( new File( "NUL:" ) ) );
ByteArrayOutputStream
это то, что вы хотите (при условии, что API будет выводить текст). Просто создайте новый экземпляр.