Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    315

    StreamCurruptedException in Java

    Salve ragazzi,
    un eccezione di questo tipo da cosa può dipendere???

    StreamCurruptedException

    Il mio programma ha un ciclo infinito di attesa in cui legge su un ObjectOutputStream con la readObject().
    La prima volta mi compare questa eccezione, inizia lo scambio di messaggi ed ad un certo punto il server non riceve più nulla.

    Cosa posso fare???

    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    StreamCorruptedException viene sollevata quanto tenti di leggere da un ObjectInputStream (o, in generale, da uno Stream) dei dati che lui non si aspetta di trovare (perchè magari sono di tipo diverso da ciò che si aspetta).

    Ad esempio, se metti in ascolto da tastiera un ObjectInputStream riceverai quel tipo di eccezione per il seguente motivo: la readObject() si aspetta di ricevere un Oggetto Java, ma trova una serie di caratteri iniziali che non rappresentano l'intestazione di una classe.

    Gli oggetti, infatti, sono rappresentati in memoria tramite un "preambolo" di byte che indicano alla JVM che si tratta di un Object, quindi c'è la parte di dati, poi (probabilmente) c'è una serie di byte che identifica la fine dell'oggetto. Quindi, ad esempio, una Stringa potrebbe essere rappresentata così:
    codice:
    [PREAMBOLO]Questa è la stringa[FINE_DATI]
    Dove PREAMBOLO potrebbe essere una cosa del genere (ovviamente codificata):
    codice:
    Tipo: Object
    Sottotipo: String
    Versione JVM: 1.4.2
    ObjectClassID: 0000255648956100156
    e FINE_DATI potrebbe essere un byte che rappresenta la fine dei dati (come un EOF).

    Se tu metti in ascolto un ObjectInputStream sulla tastiera e cominci a scriverci "Questa è la stringa", il primo carattere che arriva alla readObject() è la Q, il successivo è la u e probabilmente già al primo carattere ti segnala l'eccezione perchè il PREAMBOLO deve cominciare con un particolare carattere...


    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

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.