Visualizzazione dei risultati da 1 a 6 su 6

Discussione: problema di casting

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    33

    problema di casting

    Ho creato due applicazioni, una client e l' altra server, che si scambiano dati.
    Una parte dei dati che invio è in formato int perché parte di GregorianCalendar; per risparmiare spazio ho pensato di effettuare un cast da int a short

    short var=(short)valore

    e inviare il dato tramite datainputstream.

    Il problema è che il valore (ad esempio 2010) viene ricevuto male; ho provato quindi ad effettuare un

    system.out.println((short)valore)

    per vedere se il problema era l' invio dati, ma così non è perché 2010 viene stampato come 1. Effettivamente dall' altra parte i valori arrivano corretti, quindi il problema sta nel casting.

    Potreste consigliarmi come proseguire? Non vorrei utilizzare più spazio di quanto necessario, perché la quantità di dati da inviare è davvero grande.

    Ringrazio tutti per la lettura e l' aiuto

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Posta il codice che ti da problemi, non abbiamo la sfera di cristallo
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    DataInputStream al suo interno mantiene un array di byte, l'unità fondamentale su cui lavora è quindi il byte.
    Il byte --> 8 bit, valori da -128 a +127
    short --> 16 bit, valori da -32768 a +32767

    molto spesso l'intero viene considerato come byte per la parte riguardante i primi 8 bit, ma questo è un cast con perdita di info.
    E' tua cura trasformare il dato (2010) in un array di byte da dare in pasto allo stream per l'elaborazione. E' tua cura in ricezione prendere la quantità corretta di byte per ricostruire da questi il tuo dato
    RTFM Read That F*** Manual!!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    33
    Vi ringrazio per i vostri interventi, sono riuscito comunque a risolvere il problema, si trattava di una banale svista (ho ripreso a programmare da non molto). Per rispondere al secondo intervento, sono riuscito comunque a scrivere e leggere correttamente i dati nel flusso semplicemente scrivendo e leggendo i numeri nella stessa sequenza, ad esempio

    server
    out.write(numeroshort);
    out.write(numerofloat);

    client
    in.readShort();
    in.readFloat();

    I numeri vengono rappresentati e stampati in ordine correttamente, ho solo un ulteriore problema, ossia il fatto che i numeri non vengono stampati tutti, ma è strutturale e ci sto lavorando

    Grazie ancora

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    mi dici come istanzi chi scrive e chi legge?
    RTFM Read That F*** Manual!!!

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    33
    Sia lato client che lato server utilizzo queste istruzioni per istanziare

    in=new DataInputStream(new BufferedInputStream(conn.getInputStream()));
    out=new DataOutputStream(new BufferedOutputStream(conn.getOutputStream()));

    dopodiché eseguo un out.writeFloat o writeShort da una parte e in.òreadFloat o readShort dall' altra

    ordine di scrittura

    scrivo dato1
    scrivodato2
    .....
    out.flush()

    ordine di lettura

    leggo dato1
    leggo dato2
    ...........

    Tutto qui

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.