로그 메시지를 GZIP로 인코딩하고 UDP로 보내야하는 로깅 시스템을 구현하고 있습니다. 내가 지금까지있어 무엇GZIP 및 UDP에 가장 빠른 방법은 Java에서 대량의 문자열입니다.
은 다음과 같습니다
초기화 :이의 PrintStream가 다음 로거에서 전달되는
DatagramSocket sock = new DatagramSocket();
baos = new ByteArrayOutputStream();
printStream = new PrintStream(new GZIPOutputStream(baos));
- 메시지는 그 다음
때마다 메시지를 통해 도착합니다 도착 :
byte[] d = baos.toByteArray();
DatagramPacket dp = new DatagramPacket(d,d.length,host,port);
sock.send(dp);
나는 현재 나를 괴롭 히며 방법은 ByteArrayOutputStream에서 데이터를 제거하려면 (toByteArray()는 복사본을 가져옵니다) 나는 매번 세 개의 스트림 객체를 재생성하는 것이 비효율적 일 것이라고 생각합니다.
보낸 데이터를 스트림에서 제거 할 수있는 방법이 있습니까? 아니면 전 완전히 다른 방향으로보아야합니까?
참고 : 문자열이 짧으면 GZIP이면 더 커집니다. –