Muszę określić OutputStream
interfejs API, którego używam, ale w rzeczywistości nie potrzebuję danych wyjściowych. Czy Java ma OutputStream
odpowiednik > /dev/null
?
Muszę określić OutputStream
interfejs API, którego używam, ale w rzeczywistości nie potrzebuję danych wyjściowych. Czy Java ma OutputStream
odpowiednik > /dev/null
?
Odpowiedzi:
Od wersji Java 11 istnieje statyczne narzędzie, które robi dokładnie to, czego potrzebujesz, statyczna metoda fabryczna OutputStream.nullOutputStream()
:
Zwraca nowy OutputStream, który odrzuca wszystkie bajty. Zwrócony strumień jest początkowo otwarty. Strumień jest zamykany przez wywołanie metody close (). Kolejne wywołania funkcji close () nie mają żadnego efektu.
/**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 nie wydaje się, ale Apache Commons IO tak. Spójrz na następujące kwestie:
Mam nadzieję, że to pomoże.
To nie jest jeszcze wspomnieć, więc będę również dodać guawy „s ByteStreams . nullOutputStream () , ponieważ niektórzy wolą Guava niż Apache Commons IO lub mają go już w swoim projekcie.
Uwaga: jeśli używasz starszej wersji Guava (od 1.0 do 13.0), chcesz użyć com.google.io.NullOutputStream .
Ponowne skasowanie już udzielonych odpowiedzi -
Java nie ma NullOutputStream
klasy. Można jednak toczyć własną rękę OutputStream
, że ignoruje wszelkie zapisane na nim dane - innymi słowy write(int b)
, write(byte[] b)
i write(byte[] b, int off, int len)
będzie mieć pustych ciał metod. To właśnie NullOutputStream
robi klasa Common IO .
Nie, ale jest to dość łatwe do wdrożenia.
Zobacz to pytanie „Jak usunąć System.out.println z bazy kodu”
A potem wystarczy:
System.setOut( DevNull.out );
Czy jakoś tak :)
Java 11 dodała OutputStream.nullOutputStream ()
W mieście pojawił się nowy chłopak, który zajmuje się tym jak marzenie, wystarczy kilka linijek kodu. Jego JDK 11 i nullWriter () zostały tam wprowadzone, które to załatwiają. Oto kod, który rozwiązuje ten sam stary problem, nowy sposób bez martwienia się o system operacyjny (OS).
String fileContent = "Welcome to StackOverflow readers !! Here goes the question link...";
Writer writer = Writer.nullWriter();
writer.write(fileContent);
writer.close();
Mam nadzieję, że to może komuś pomóc!
Uważam, że właśnie tego szukasz, szukałem tego samego: to jest do przekierowywania strumieni wyjściowych ze standardowego błędu, standardowo w obiektach ProcessBuilder.
Zablokować cytat
pb.redirectError( ProcessBuilder.Redirect.appendTo( new File( "NUL:" ) ) );
ByteArrayOutputStream
jest tym, czego chcesz (zakładając, że API będzie wyświetlało tekst). Po prostu utwórz nową instancję.