ObjectStream - один из самых подробных доступных форматов сериализации.Примерно любая другая сериализация будет лучше по размеру.ObjectStreams должны быть сброшены для отправки всех данных, и вы не можете отправить более одного потока в соединении, что делает неэффективным просто отправку одного объекта на соединение.
Сжатые потоки работают лучше всего для больших объемов данных,когда вы пытаетесь применить их к нескольким байтам, результат будет больше, а не меньше.Сжатые потоки должны быть сброшены для чтения.
необходимо отправить несколько объектов, используя один и тот же поток и сокет (с точки зрения производительности)
Это означает, что вы должны сохранить свой GZIPОбъектные потоки.Вы не можете использовать более одного на поток.
public class ObjectSocket implements Closeable {
private final Socket socket;
private final ObjectOutputStream output;
private final ObjectInputStream input;
public ObjectSocket(Socket socket) throws IOException {
this.socket = socket;
this.output = new ObjectOutputStream(new DeflaterOutputStream(socket.getOutputStream()));
this.input = new ObjectInputStream(new InflaterInputStream(socket.getInputStream()));
}
public void send(Serializable obj) throws IOException {
output.writeObject(obj);
output.reset();
output.flush();
}
public <T extends Serializable> T receive() throws IOException, ClassNotFoundException {
return (T) input.readObject();
}
@Override
public void close() throws IOException {
output.close();
input.close();
socket.close();
}
}