Mi scuso ci sono varie discussioni in proposito ma c'è un po' di confusione mi date una mano per favore
Devo inviare un file dal server al client e non ho ben capito il tipo di stream da utilizzare alcuni usano solo FileInputStream e FileOutputStream altri invece una combinazione di questi con ObjectInputStream e ObectOutputStream

Nel Server

codice:
............................

OutputStream os = socket.getOutputStream();

FileInputStream fis = new FileInputStream("C:\\file.mp3");
byte[] buffer = new byte[1024];
int pos=0;
try{
   while((pos=fis.read(buffer))!=-1)
           os.write(buffer, 0, pos);
   }
catch(IOException e){e.printStackTrace();}

..............................
Nel Client

codice:
.......................


File salva = new File (nome);
FileOutputStream  fos = new FileOutputStream(salva);
InputStream is = socket.getInputStream();
byte[] buf = new byte[1024];
int p = 0;
while((p=is.read(buf))!=-1) {
     fos.write(buf, 0, p);
    }
...........................................
Questa è una soluzione o funziona solo perchè il client e server sono sulla stessa macchina.Oppure devo mettere i dati in un paccheto di byte e spedirli con ObjectOutputStream (writeObject) e leggerli con ObjectInputStream (readObject)...
Un'altra domanda se il file e di grandi dimensioni come fare a inviare una quantita maggiore di dati contemporaneamete invece di leggere ed scrivere solo 1024 byte