我正在实现一个日志系统,该系统需要使用 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() 只需要一个副本),而且我担心每次重新创建所有三个流对象都会效率低下。
有没有办法从流中删除发送的数据?还是我应该完全转向另一个方向?