ログ メッセージを GZIP でエンコードし、UDP で送信する必要があるログ システムを実装しています。
私がこれまでに持っているものは次のとおりです。
初期化:
DatagramSocket sock = new DatagramSocket();
baos = new ByteArrayOutputStream();
printStream = new PrintStream(new GZIPOutputStream(baos));
この printStream はロガーから渡されます - メッセージはそれを介して到着します
次に、メッセージが到着するたびに:
byte[] d = baos.toByteArray();
DatagramPacket dp = new DatagramPacket(d,d.length,host,port);
sock.send(dp);
現在私が困惑しているのは、ByteArrayOutputStream からデータを削除する方法が見つからないことです (toByteArray() はコピーのみを取得します)。3 つのストリーム オブジェクトすべてを毎回再作成するのは非効率的ではないかと心配しています。
送信されたデータをストリームから削除する方法はありますか? それとも、まったく別の方向に目を向けるべきですか?