ObjectOutputStream o BufferedWriter ?

di il
4 risposte

ObjectOutputStream o BufferedWriter ?

Ciao a tutti,
sono alle prese con la scrittura di codice Java per far comunicare un client e un server. Tramite le socket vorrei inviare un oggetto di tipo String da client a server e che io sappia posso farlo tramite la serializzazione nel seguente modo:

ObjectOutputStream output = new ObjectOutputStream (clientsocket.getOutputStream());
output.writeObject("STRINGA DA INVIARE");
oppure attraverso un BufferedWriter:

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(clientsocket.getOutputStream());
writer.write("STRINGA DA INVIARE");
La mia domanda è: dal punto di vista computazionale c'è differenza tra i due modi ? Quale è il più efficiente ? Vi ringrazio in anticipo.

4 Risposte

  • Re: ObjectOutputStream o BufferedWriter ?

    DanPir ha scritto:


    La mia domanda è: dal punto di vista computazionale c'è differenza tra i due modi ? Quale è il più efficiente ? Vi ringrazio in anticipo.
    Il punto è che devi stabilire TU prima se vuoi realizzare un "protocollo" di comunicazione binario o testuale. Se è binario lo stream sarà fatto di byte "crudi" il cui significato dipende dalla posizione del byte, da cosa rappresenta, ecc... E la serializzazione degli oggetti è un caso molto particolare di protocollo "binario".
    Se è testuale, i byte sullo stream rappresentano esclusivamente "caratteri" (e tra l'altro devi stabilire un charset ben preciso e fisso per la codifica dei caratteri in byte). Ma devi anche stabilire come delimitare le informazioni. Scenario tipico: un protocollo testuale fatto "a righe" ciascuna con un qualche comando.

    La differenza tecnica su quanto hai esposto è che con ObjectOutputStream una stringa è sempre ben definita e riconoscibile sullo stream (e da chi riceve), non dipende da cosa contiene la stringa. Proprio perché c'è un protocollo binario di fondo della serializzazione. Mentre se scrivi solo stringhe ... devi stabilire tu anche "altro", non basta solo sapere di scrivere una stringa.
  • Re: ObjectOutputStream o BufferedWriter ?

    andbin ha scritto:


    La differenza tecnica su quanto hai esposto è che con ObjectOutputStream una stringa è sempre ben definita e riconoscibile sullo stream (e da chi riceve), non dipende da cosa contiene la stringa. Proprio perché c'è un protocollo binario di fondo della serializzazione. Mentre se scrivi solo stringhe ... devi stabilire tu anche "altro", non basta solo sapere di scrivere una stringa.
    Quindi se ho ben capito con la serializzazione non ho problemi riguardo i contenuti ("fa tutto in automatico" il processo di serializzazione) mentre utilizzando il BufferedWriter devo occuparmi della definizione del protocollo di comunicazione giusto ? A questo punto penso che per lo scambio di oggetti convenga di più utilizzare la serializzazione. Grazie mille!
  • Re: ObjectOutputStream o BufferedWriter ?

    DanPir ha scritto:


    Quindi se ho ben capito con la serializzazione non ho problemi riguardo i contenuti ("fa tutto in automatico" il processo di serializzazione) mentre utilizzando il BufferedWriter devo occuparmi della definizione del protocollo di comunicazione giusto ? A questo punto penso che per lo scambio di oggetti convenga di più utilizzare la serializzazione. Grazie mille!
    Sì, con la serializzazione degli oggetti, ciascun oggetto (che sia String o altro) è sempre ben definito e "taggato" sullo stream. Mentre invece se scrivi solo stringhe devi stabilire tu meglio cosa vogliono dire: mandi "righe"? mandi un comando terminato da un carattere speciale? altro?

    Se devi inviare oggetti e in particolare di tue classi specifiche, allora la serializzazione in generale è ok. Ricorda però che la serializzazione non è esente da problematiche/inconvenienti. Innanzitutto se usi writeObject/readObject c'è un meccanismo predefinito di "caching" degli oggetti. Se invii un oggetto X, poi cambi lo "stato" di quell'oggetto e reinvii di nuovo quello stesso oggetto X, chi riceve NON vede le modifiche.
    Inoltre le due applicazioni Java devono avere le stesse definizioni delle classi coinvolte nella serializzazione. Se possono/devono differire allora devi anche preoccuparti del "versionamento" delle classi.
  • Re: ObjectOutputStream o BufferedWriter ?

    Molto gentile
Devi accedere o registrarti per scrivere nel forum
4 risposte