Ich habe eine InputStream
, die zu Standout eines anderen Prozesses angefügt ist. Manchmal muss ich Daten aus dem Stream protokollieren und manchmal nicht. Selbst wenn mir die Ausgabe egal ist, muss ich sie trotzdem lesen, damit der andere Prozess wegen eines vollen Ausgabepuffers nicht blockiert. Ich verwende den folgenden Code, um selektiv den Ausgang log:Wie ignoriere ich alle Daten von einem InputStream, ohne statische Analyse-Tools auszulösen?
InputStream is = ...;
boolean report = ...;
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
if (report) {
String line = null;
while ((line = br.readLine()) != null) {
Debug.println(line);
}
} else {
while (br.readLine() != null) {
}
}
jedoch in der zweiten while
Schleife, FindBugs Benachrichtigungen (RV_DONT_JUST_NULL_CHECK_READLINE), die ich rufe readLine
und nur prüft wird, ob es null ist, nichts zu tun mit das Ergebnis. Seine Analyse ist korrekt, aber ich möchte wollen nichts mit dem Ergebnis in diesem Fall tun. Gibt es eine idiomatische Methode, alle Daten aus einem Stream zu konsumieren und zu ignorieren, sodass FindBugs nicht wie ein Fehler aussieht?
@SuppressWarnings ist anderen Lösungen überlegen, die Syntax-Tricks enthalten, um die Warnung zu schließen, weil es sich selbst dokumentiert: Sie sagen zukünftigen Lesern Ihres Codes (möglicherweise Sie selbst), dass Sie das tun wollten. – BadZen
Aber @BadZen, sagt es nicht auch den Lesern, dass ich alle anderen möglichen Fehler in derselben Methode machen wollte, ob ich es tat oder nicht? Welche der möglichen 'SuppressWarns'-Kategorien empfiehlst du für meine Situation, Santiago? Keine der Links, auf die Sie verlinken, scheint zutreffen. –
Nicht vertraut mit FindBugs oder was @SuppressWarnings Werte es unterstützt! OP sollte den engsten Wert verwenden, der seine Warnung beseitigt, um Ihr Anliegen oben anzugehen. – BadZen