Preciso especificar um OutputStream
para uma API que estou usando, mas na verdade não preciso da saída. Java tem um OutputStream
equivalente a > /dev/null
?
Preciso especificar um OutputStream
para uma API que estou usando, mas na verdade não preciso da saída. Java tem um OutputStream
equivalente a > /dev/null
?
Respostas:
Desde o Java 11, existe um utilitário estático que faz exatamente o que você precisa, um método de fábrica estático OutputStream.nullOutputStream()
:
Retorna um novo OutputStream que descarta todos os bytes. O fluxo retornado é inicialmente aberto. O fluxo é fechado chamando o método close (). As chamadas subsequentes para close () não têm efeito.
/**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 não parece, mas o Apache Commons IO sim. Dê uma olhada no seguinte:
Espero que ajude.
Ainda não é mencionado, então eu também vou acrescentar goiaba 's ByteStreams . nullOutputStream () , pois alguns podem preferir o Guava ao invés do Apache Commons IO ou já o tem em seu projeto.
Observação: se você usar uma versão mais antiga do Guava (de 1.0 a 13.0), convém usar com.google.io.NullOutputStream .
Refazendo as respostas já fornecidas -
Java não tem NullOutputStream
classe. No entanto, você pode rolar o seu próprio OutputStream
que ignora quaisquer dados gravados nele - em outras palavras write(int b)
, write(byte[] b)
e write(byte[] b, int off, int len)
terá corpos de método vazios. Isso é o que a NullOutputStream
classe IO comum faz.
Não, mas é muito fácil de implementar.
Consulte esta pergunta "Como remover System.out.println da base de código"
E então você só precisa:
System.setOut( DevNull.out );
Ou algo assim :)
Java 11 adicionou OutputStream.nullOutputStream ()
Há um novo garoto na cidade que cuida disso como um encanto, apenas algumas linhas de código devem funcionar. Seu JDK 11 e nullWriter () foram introduzidos lá, que cuidam disso. Aqui vai o código para lidar com o mesmo velho problema, de uma maneira nova, sem se preocupar com o Sistema Operacional (SO).
String fileContent = "Welcome to StackOverflow readers !! Here goes the question link...";
Writer writer = Writer.nullWriter();
writer.write(fileContent);
writer.close();
Espero que isso possa ajudar alguém!
Eu acredito que é isso que você está procurando, eu estava procurando a mesma coisa: isso é para redirecionar fluxos de saída de erro padrão, padrão em objetos ProcessBuilder.
Bloco de citação
pb.redirectError( ProcessBuilder.Redirect.appendTo( new File( "NUL:" ) ) );
ByteArrayOutputStream
é o que você deseja (assumindo que a API produzirá texto). Basta instanciar um novo.