7.- No problem. You can simply wrap your stream into a GZIPOutputStream/GZIPInputStream. That's basically all that has to be done to zip the data.
this works for you since (as far as i know) you send data continuously.
CompressedOutputStream cos=new CompressedOutputStream (Socket.getOutputStream);ObjectOutputStream oos= new ObjectOutputStream (cos);oos.writeObject (whatever);