Verwenden von Guava CountingOutputStream
1. Überblick
In diesem Tutorial werden wir uns die KlasseCountingOutputStreamund ihre Verwendung ansehen.
Die Klasse befindet sich in gängigen Bibliotheken wieApache Commons oderGoogle Guava. Wir werden uns auf die Implementierung in der Guava-Bibliothek konzentrieren.
2. CountingOutputStream
2.1. Maven-Abhängigkeit
CountingOutputStream ist Teil des Guava-Pakets von Google.
Beginnen wir mit dem Hinzufügen der Abhängigkeit zupom.xml:
com.google.guava
guava
24.1-jre
Die neueste Version der Abhängigkeit kann inhere überprüft werden.
2.2. Klassendetails
Die Klasse erweitertjava.io.FilterOutputStream, überschreibt die Methodenwrite() undclose() und stellt die neue MethodegetCount() bereit.
Der Konstruktor verwendet ein weiteresOutputStream-Objekt als Eingabeparameter. While writing data, the class then counts the number of bytes written into this OutputStream.
Um die Anzahl zu erhalten, können wir einfachgetCount() aufrufen, um die aktuelle Anzahl von Bytes zurückzugeben:
/** Returns the number of bytes written. */
public long getCount() {
return count;
}
3. Anwendungsfall
Verwenden wirCountingOutputStream in einem praktischen Anwendungsfall. Zum Beispiel werden wir den Code einem JUnit-Test unterziehen, um ihn ausführbar zu machen.
In unserem Fall werden wir Daten inOutputStream schreiben und prüfen, ob wir eine Grenze vonMAX Bytes erreicht haben.
Sobald wir das Limit erreicht haben, möchten wir die Ausführung durch Auslösen einer Ausnahme abbrechen:
public class GuavaCountingOutputStreamUnitTest {
static int MAX = 5;
@Test(expected = RuntimeException.class)
public void givenData_whenCountReachesLimit_thenThrowException()
throws Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream();
CountingOutputStream cos = new CountingOutputStream(out);
byte[] data = new byte[1024];
ByteArrayInputStream in = new ByteArrayInputStream(data);
int b;
while ((b = in.read()) != -1) {
cos.write(b);
if (cos.getCount() >= MAX) {
throw new RuntimeException("Write limit reached");
}
}
}
}
4. Fazit
In diesem kurzen Artikel haben wir uns die KlasseCountingOutputStreamund ihre Verwendung angesehen. Die Klasse stellt die zusätzliche MethodegetCount() bereit, die die Anzahl der bisher inOutputStream geschriebenen Bytes zurückgibt.
Schließlich kann wie immer der während der Diskussion verwendete Codeover on GitHub gefunden werden.