Logback: the reliable, generic, fast and flexible logging framework.
Copyright (C) 1999-2015, QOS.ch. All rights reserved.
This program and the accompanying materials are dual-licensed under
either the terms of the Eclipse Public License v1.0 as published by
the Eclipse Foundation
or (per the licensee's choosing)
under the terms of the GNU Lesser General Public License version 2.1
as published by the Free Software Foundation.
/**
* Logback: the reliable, generic, fast and flexible logging framework.
* Copyright (C) 1999-2015, QOS.ch. All rights reserved.
*
* This program and the accompanying materials are dual-licensed under
* either the terms of the Eclipse Public License v1.0 as published by
* the Eclipse Foundation
*
* or (per the licensee's choosing)
*
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
package ch.qos.logback.core.net;
import java.io.IOException;
import java.io.ObjectOutputStream;
Automatically flushes the underlying ObjectOutputStream
immediately after calling it's ObjectOutputStream.writeObject(Object)
method. Author: Sebastian Gröbler
/**
* Automatically flushes the underlying {@link java.io.ObjectOutputStream} immediately after calling
* it's {@link java.io.ObjectOutputStream#writeObject(Object)} method.
*
* @author Sebastian Gröbler
*/
public class AutoFlushingObjectWriter implements ObjectWriter {
private final ObjectOutputStream objectOutputStream;
private final int resetFrequency;
private int writeCounter = 0;
Creates a new instance for the given ObjectOutputStream
. Params: - objectOutputStream – the stream to write to
- resetFrequency – the frequency with which the given stream will be
automatically reset to prevent a memory leak
/**
* Creates a new instance for the given {@link java.io.ObjectOutputStream}.
*
* @param objectOutputStream the stream to write to
* @param resetFrequency the frequency with which the given stream will be
* automatically reset to prevent a memory leak
*/
public AutoFlushingObjectWriter(ObjectOutputStream objectOutputStream, int resetFrequency) {
this.objectOutputStream = objectOutputStream;
this.resetFrequency = resetFrequency;
}
@Override
public void write(Object object) throws IOException {
objectOutputStream.writeObject(object);
objectOutputStream.flush();
preventMemoryLeak();
}
Failing to reset the object output stream every now and then creates a serious memory leak which is why the underlying stream will be reset according to the resetFrequency
. /**
* Failing to reset the object output stream every now and then creates a serious memory leak which
* is why the underlying stream will be reset according to the {@code resetFrequency}.
*/
private void preventMemoryLeak() throws IOException {
if (++writeCounter >= resetFrequency) {
objectOutputStream.reset();
writeCounter = 0;
}
}
}