PDA

View Full Version : [JAVA]ObjectInputStream e ObjectOutputStream


MEMon
06-08-2006, 17:50
Devo spedire e riceve varie tipologie di dati(stringhe, int, float, oggetti vari), mi stavo chiedendo, anzi a dir la varità lo chiedo a voi :D se mi conviene continuara a fare come sto facendo ora, ossia uso SEMPRE gli ObjectInputStream e ObjectOutputStream con i metodi writeObject(Object) e readObject(), stando solo attento a castare bene quando ricevo il dato, o mi conviene per ogni tipo di dato usare il suo metodo appropiato? tipo writeInt(int), writeFloat(float) o addirittura utilizzare gli stream appropiati come il DataInputStream e DataOutputStream?

Mi interessava sapere quale era più "performante" siccome io poi questi dati li devo tutti inviare su internet e mi serve una certa velocità, quindi direi pacchetti di dimensioni ridotte.

Da quel che ho capito io gli ObjetStream comprendono anche tutti gli altri tipi di stream quindi non ci dovrebbe essere differenza o sbaglio? cmq chiedo che non si sa mai...

MEMon
06-08-2006, 18:01
Considerate che uso UDP quindi DatagramPacket quindi array di byte, infatti poi devo incapsulare un ByteArrayStream in uno degli stream notevoli, e come dicevo ora uso sempre gli ObjectStream e faccio così:
ByteArrayOutputStream baos=new ByteArrayOutputStream();
ObjectOutputStream os=new ObjectOutputStream(baos);
os.writeObject(Object);
os.close()

Mi è venuto il dubbio di ottimizzare quando ho visto la grandezza di una datagrampacket che conteneva un int impacchettato in questo modo, era di 81 byte, siccome un int è 32 bit direi che c'è un bello spreco, o no?

MEMon
06-08-2006, 18:58
Ho fatto alcune prove e quindi posso rispondere alla mia domanda :D
Come volevasi dimostrare i DataStream sono migliori dei ObjectStream quando si vuole uno stream di caratteri,int,short,byte,float,double, in quanto occupano il solo spazio della loro dimensione.
Usando gli objectStream nonostante si usi i metodi appropriati writeInt, writeShot ecc ecc lo spazio occupato è superiore.
Io non lo sapevo ora lo so :D