Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2017
    Messaggi
    1

    [JAVA]java.io.StreamCorruptedException: invalid type code: AC

    Ciao a tutti!!

    Sto "lavorando" ad un progetto JavaFX e sono incappato su problema che non riesco a venirne a capo. In poche parole devo implementare una Login/Registration page che una volta effettuata la funzione di log-in/sign-in mi riporta alla Homepage del progetto. Ho implementato la classe User (implements Serializable) e nella classe di test ho creato i due handle dei bottoni di Registrazione e di Login. Fondamentalmente con Registrazione scrivi su file(attraverso ObjectOutputStream fos = new ObjectOutputStream(new FileOutputStream(nomeFile, true)); e con il metodo di scrittura writeObject() ) e con Login legge il file e controlla le credenziali inserite dall'utente (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(nomeFile))).

    Una volta che vado a mettere il readObject() all'interno di un ciclo per "scorrere" il file di testo con all'interno tutte le credenziali registrate, mi lancia l'eccezione java.io.StreamCorruptedException: invalid type code: AC. Cioè si ferma alla prima riga e poi fine.
    Per capire lascio qua la parte di codice in cui mi dava errore( qui stavo facendo dei test su un "progetto di prova" concettualmente non cambia perchè l'idea è quella di inserire da file tutti gli utenti su un array list e poi scorrerlo per trovare le credenziali corrette ed effettuare il login)
    Codice:
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream(nomeFile));

    ArrayList<User> list = new ArrayList<User>();
    User u;
    while ((u = (User) ois.readObject()) != null) list.add(u);

    Spero di essermi fatto capire e grazie dell'aiuto in anticipo

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    C'è una questione fondamentale: la serializzazione ha una sua logica e un suo modo di operare. In buona sostanza, non puoi "appendere" serializzazioni ad un file di serializzazione già esistente, altrimenti quest'ultimo risulta corrotto.
    Se vuoi "appendere" nuovi oggetti ad un file di serializzazione, quello che va fatto è:

    1) Leggo tutto il file
    2) Chiudo il file
    3) Ricreo il file vuoto
    4) Riscrivo tutti gli oggetti letti in precedenza
    5) Aggiungo i nuovi oggetti
    6) Tengo aperto il file o lo chiudo all'occorrenza

    Detto questo, aprire l'ObjectOutputStream usando un FileOutputStream con il flag di append a true è sbagliato: non si può fare.


    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

Tag per questa discussione

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 © 2024 vBulletin Solutions, Inc. All rights reserved.