Originariamente inviato da AtoXx
ho risolto così:
parte di codice per inviare un file
codice:
OutputStream s1out = socket.getOutputStream();
FileInputStream fin = new FileInputStream(nome);
dos = new DataOutputStream(s1out);
dis = new DataInputStream(fin);
byte buffer[] = new byte[dis.available()]; 
ObjectOutputStream oos = new ObjectOutputStream( socket.getOutputStream() );             
fin.read(buffer);             
oos.writeObject( buffer );             
System.out.println("File Inviato!");
No, mi spiace ma ci sono solo cose inutili. A meno che tu debba usare la "serializzazione" degli oggetti in un secondo momento o per altro, usare un ObjectOutputStream addirittura con il suo writeObject per inviare un banale buffer byte[] è del tutto inutile/superfluo.

E pure i DataInputStream/DataOutputStream sarebbero inutili/superflui (ripeto, a meno che dimostri che ti servono anche per altro) visto che non stai usando i loro metodi specifici per i tipi "primitivi" (es. writeInt/writeLong o readInt/readLong, ecc...).

E comunque, pur sapendo a priori, che i file non sono grossi, leggere e scrivere l'intero file non è proprio il meglio che si può fare.

Originariamente inviato da AtoXx
parte per ricevere
codice:
 
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());             
File file = new File(nome);             
byte[] pacchetto = null; 
// Ricevo il pacchetto dati             
try {                 
pacchetto = (byte[]) ois.readObject();             
} catch (Exception e) {                 
System.err.println("Errore nel byte[]" + e.getMessage());             
}  
// Lo scrivo nel file di destinazione             
FileOutputStream fos = new FileOutputStream(ricevuti + nome + ".xml");
fos.write(pacchetto);             
fos.close();
Idem come sopra. A meno che mi dimostri che hai bisogno di ObjectInputStream per altro, è del tutto inutile/superfluo usarlo per ricevere un byte[].
Hai scelto di usare la serializzazione per de-serializzare un byte[] ma solo perché come hai visto è "comodo" in quanto la serializzazione usa un suo "protocollo" e quindi "sa" ovviamente quanto e come leggere un array di byte. Ma sarebbe tutto qui.

Non è comunque così che programmerei io ....