Witam.
Jestem w czasie robienia projektu klient/server. Za zadanie mam w tym projekcie wcisnąć tyle wzorców ile się da. Dlatego przy komunikacji zamiast wysyłać np. obiekt, chcę zastosować GZIP i wysyłać ciąg bajtów. Niestety są problemy i nie wiem gdzie mam się ich doszukiwać.

Klasa Network

package kolemkrzyzem;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

public class Network extends Thread{
    java.net.ServerSocket sock = null;
    java.net.Socket clientSocket = null;
    InputStream inputStream = null;
    OutputStream outputStream = null;
    GZIPInputStream in = null;
    GZIPOutputStream out = null;

    public void send(Object msg) throws IOException
    {
        ByteArrayOutputStream baos= new ByteArrayOutputStream();
        ObjectOutputStream oos=new ObjectOutputStream(baos);
        oos.writeObject(msg);
        oos.flush();

        baos.writeTo(out);
        oos.close();
        baos.close();
    }

    public Object read() throws IOException, InterruptedException, ClassNotFoundException
    {
	while (inputStream.available() == 0)
	{
		sleep(100);
	}

        byte[] ar=new byte[1000];

        in.read(ar);

        ByteArrayInputStream baos= new ByteArrayInputStream(ar);
        ObjectInputStream cx=new ObjectInputStream(baos);

        return cx.readObject();
    }
}

Klasa ClientNetwork:

package kolemkrzyzem;

import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

public class ClientNetwork extends Network{
    private String host;
    private int port;

    public ClientNetwork(String host1, int port1) throws IOException
    {
       host = host1;
       port = port1;
    }

    void connectToServer() throws IOException
    {
        try
        {
            clientSocket = new java.net.Socket(host,port);
        } catch (java.net.SocketTimeoutException ex) { }

	outputStream = clientSocket.getOutputStream();
	inputStream = clientSocket.getInputStream();
        out = new GZIPOutputStream(outputStream);
        in = new GZIPInputStream(inputStream);
    }
}

Klasa ServerNetwork

package kolemkrzyzem;

import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

public class ServerNetwork extends Network{
    private int port;

    public ServerNetwork(int port) throws IOException
    {
        this.port = port;
    }

    void acceptClient() throws IOException
    {
        sock = new java.net.ServerSocket(port);
        clientSocket = sock.accept();

	outputStream = clientSocket.getOutputStream();
	inputStream = clientSocket.getInputStream();
        out = new GZIPOutputStream(outputStream);
        in = new GZIPInputStream(inputStream);
    }

}

Połączenie następuje, serwer niby bez problemu wysyła dane i działa dalej, ale klient tego nie widzi (zatrzymuje się na pętli z inputStream.available() == 0), a gdy w ogóle wywalę tą pętlę to mi zatrzymuje się na in.read(ar).
Jave znam słabo dlatego pytam czy da się zrobić klient/server za pośrednictwem GZIPa? Informuje, że bez GZIPa za pomocą samych ObjectXXXStream działa dobrze.