GuavaCountingOutputStreamの使用
1. 概要
このチュートリアルでは、CountingOutputStreamクラスとその使用方法について説明します。
このクラスは、 ApacheCommonsやGoogleGuavaなどの人気のあるライブラリにあります。 Guavaライブラリでの実装に焦点を当てます。
2. CountingOutputStream
2.1. Mavenの依存関係
CountingOutputStream は、GoogleのGuavaパッケージの一部です。
pom.xmlに依存関係を追加することから始めましょう。
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>
依存関係の最新バージョンはここで確認できます。
2.2. クラスの詳細
このクラスはjava.io.FilterOutputStreamを拡張し、 write()および close()メソッドをオーバーライドし、新しいメソッド
コンストラクターは、別のOutputStreamオブジェクトを入力パラメーターとして受け取ります。 データの書き込み中に、クラスはこのOutputStreamに書き込まれたバイト数をカウントします。
カウントを取得するには、 getCount()を呼び出すだけで、現在のバイト数を返すことができます。
/** Returns the number of bytes written. */
public long getCount() {
return count;
}
3. 使用事例
CountingOutputStreamを実際のユースケースで使用してみましょう。 例として、コードをJUnitテストに入れて実行可能にします。
この例では、 OutputStream にデータを書き込み、MAXバイトの制限に達しているかどうかを確認します。
制限に達したら、例外をスローして実行を中断します。
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. 結論
この簡単な記事では、CountingOutputStreamクラスとその使用法について説明しました。 このクラスは、これまでに OutputStreamに書き込まれたバイト数を返す追加のメソッドgetCount()を提供します。
最後に、いつものように、ディスカッション中に使用されたコードは、GitHubのにあります。