【发布时间】:2012-11-20 16:12:10
【问题描述】:
我正在实现一个日志系统,它需要使用 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() 只需要一个副本),而且我担心每次重新创建所有三个流对象都会效率低下。
有没有办法从流中删除发送的数据?还是我应该完全转向另一个方向?
【问题讨论】:
-
注意:如果字符串很短,GZIPed 会更大。
标签: java udp gzip bytearrayoutputstream