Existe um OutputStream nulo em Java?


112

Preciso especificar um OutputStreampara uma API que estou usando, mas na verdade não preciso da saída. Java tem um OutputStreamequivalente a > /dev/null?

Respostas:


19

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.


Incrível, obrigado por apontar isso! Mas "desde o Java 11"? Acho que o Java 11 foi lançado há apenas uma semana.
Brandon Yarbrough,

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

15
Isso também pode ser facilmente implementado onde você precisar, usando algo assim: OutputStream nullOutputStream = new OutputStream() { @Override public void write(int b) { } };
Hank Schultz




3

Não na biblioteca padrão AFAIK, mas não deve ser difícil criar uma substituindo a gravação em OutputStream


Por que isso foi rejeitado? Na verdade, é trivial implementar essa solução, como McDowell mostrou acima.
pdxleif



1

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!


0

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:" ) ) );
  • Dom

Isso é específico do Windows.
peterh

-4

ByteArrayOutputStreamé o que você deseja (assumindo que a API produzirá texto). Basta instanciar um novo.


2
Esta é uma má ideia porque você acumulará dados na memória em vez de jogá-los fora. E se o gravador gravar 15 GB de lixo em seu BAOS? Poderia acontecer.
trate bem seus mods
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.