Ciao a tutti!

Sto realizzando un piccolo programma che trasferisce file via socket:in poche parole leggo un file byte per byte, metto questi byte in un array che scrivo sulla socket e li ricevo dall'altra parte.

Parte del codice del client:
codice:
 Socket socket = new Socket("127.0.0.1", 1234); 
 ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
 FileInputStream fis = new FileInputStream("prova.jar");
 int x = 0;
 int i = 0;     
 while((i=fis.read())!=-1)//calcolo la lunghezza esatta del file in modo da creare un array
 {                             //ad hoc
        x++;
 }
 while((i=fis.read(buf))!=-1) {}//riempo l'array con i byte del file
 byte[] buf = new byte[x];//creo l'array che conterrà i byte
 oos.write(buf);//scrivo sullo stream
 oos.flush();
Dal lato server invece:
codice:
 ServerSocket ss = new ServerSocket(SERVER_PORT);
 FileOutputStream fos = new FileOutputStream("prova.jar");
 Socket s = ss.accept();
 ObjectInputStream oin = new ObjectInputStream(s.getInputStream());//stream da cui               
                                                                                              //ricevere i byte
 byte[] buf = new byte[l];//creo un array in cui mettere  byte(la lunghezza è identica a    
                                  //quello creato nel client
 oin.read(buf);//leggo i byte dallo stream e li metto nell'array
 fos.write(buf);//scrivo in un file i byte ricevuti
 fos.flush();
Il problema è che l'array è pieno di byte tutti a zero, mentre sono sicuro che il file di partenza pieno! Sto lavorando su dei file .jar, ma siccome mi vengono trasferiti sempre dei byte a zero quando tento di aprire il file scritto dal server mi dice che non riconosce l'estensione. Mi sapreste aiutare?