Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it L'avatar di sersul
    Registrato dal
    Feb 2003
    Messaggi
    75

    [JAVA] Trasformare un qualsiasi oggetto in una sequenza di byte

    Come posso trasformare un qualsiasi oggetto che estende la classe Object in una sequenza di byte?
    Per esempio la classe String ha un metodo getBytes() che permette di fare questo.
    Ho provato ad estendere il mio oggetto con la classe Serializable ma nn trovo il metodo..

    Qualcuno ha qualche idea?


  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Una soluzione veloce che mi viene in mente è questa:

    - fai implementare Serializable alla classe che vuoi trasformare in sequenza di byte

    - Salvi un oggetto di quella classe in un file

    - Leggi il file byte per byte e salvi questi byte in un array.


    Il procedimento non è dei migliori, però dovrebbe funzionare.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di sersul
    Registrato dal
    Feb 2003
    Messaggi
    75
    Originariamente inviato da LeleFT
    Una soluzione veloce che mi viene in mente è questa:

    - fai implementare Serializable alla classe che vuoi trasformare in sequenza di byte

    - Salvi un oggetto di quella classe in un file

    - Leggi il file byte per byte e salvi questi byte in un array.


    Il procedimento non è dei migliori, però dovrebbe funzionare.


    Ciao.
    Come faccio a sapere quanto è grande l'array di byte? E soprattutto come faccio a leggere byte da file?
    Io ho fatto la scrittura ma la lettura di byte?
    codice:
    FileWriter fileout = new FileWriter("utility/utility.txt");
    BufferedWriter filebufW = new BufferedWriter(fileout);
    PrintWriter printout = new PrintWriter(filebufW);
    
    printout.println(<<Object>>);
    printout.close();
    Tanks

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    In questo modo:
    codice:
    FileInputStream fis = new FileInputStream( "nome_del_file" );
    byte [] mioFile = new byte[ fis.available() ];  // numero di byte di
                                                    // cui è composto il file
    for (int i=0; i<mioFile.length; i++) {
       mioFile[i] = fis.read();
    }
    
    // Ora nell'array mioFile ho il file byte per byte
    Così dovrebbe andare... non l'ho provato, ma dovrebbe essere giusto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it L'avatar di sersul
    Registrato dal
    Feb 2003
    Messaggi
    75
    Originariamente inviato da LeleFT
    In questo modo:
    codice:
    FileInputStream fis = new FileInputStream( "nome_del_file" );
    byte [] mioFile = new byte[ fis.available() ];  // numero di byte di
                                                    // cui è composto il file
    for (int i=0; i<mioFile.length; i++) {
       mioFile[i] = fis.read();
    }
    
    // Ora nell'array mioFile ho il file byte per byte
    Così dovrebbe andare... non l'ho provato, ma dovrebbe essere giusto.


    Ciao.
    L'ho provato e nn va perchè il metodo read() restituisce un intero nn il byte letto.. per cui ho sostituito
    codice:
    for (int i=0; i<mioFile.length; i++) {
       mioFile[i] = fis.read();
    }
    con
    codice:
    fis.read(mioFile);
    Che dici è giusto?

  6. #6
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    Va bene; al limite avresti potuto anche castare l'intero e cioè:

    codice:
    for (int i=0; i<mioFile.length; i++) {
       mioFile[i] = (byte)fis.read();
    }
    Ciao
    Se vuoi trovare l'arcobaleno, devi sopportare la pioggia

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da Angelo1974
    Va bene; al limite avresti potuto anche castare l'intero e cioè:

    codice:
    for (int i=0; i<mioFile.length; i++) {
       mioFile[i] = (byte)fis.read();
    }
    Ciao
    Sì... non avevo tenuto conto che era un int, ma bastava castarlo..

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it L'avatar di sersul
    Registrato dal
    Feb 2003
    Messaggi
    75
    Ok funziona... grazie!

    Un altra cosa: Se volessi fare il contrario?

    Ossia ho una sequenza di byte e voglio ottenere l'oggetto originario..è possibile?


  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Sono totalmente ignorante di Java, però siccome so che è molto simile al C per alcune strutture, mi chiedevo: non è meglio fare l'operazione su una stringa ? Suppongo che il Java, come C, supporti qualche classe per l'I/O su stringhe. Per la ritrasformazione da byte in oggetto, teoricamente se hai un metodo per printare l'oggetto dovresti averne uno anche per leggerlo. Non ti basta fare il procedimento inverso ? Cioè, scrivi i byte e leggi l'oggetto.

  10. #10
    Utente di HTML.it L'avatar di Mods
    Registrato dal
    Jun 2004
    Messaggi
    302
    Si può risolvere il tutto molto più facilmente, senza bisogno di scrivere su file:

    codice:
    ByteArrayOutputStream b = new ByteArrayOutputStream();
     
    ObjectOutputStream oos = new ObjectOutputStream(b);
     
    oos.writeObject(o);
    oos.flush();
     
    byte[] serializedBytes = b.toByteArray();
    Ci sono 10 tipi di persone al mondo: quelli che conoscono il codice binario, e quelli che non lo conoscono!

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.