2015-06-11 5 views
8

Non capisco perché mark() e reset() sono sincronizzati e perché read() no?Perché solo il metodo mark() e reset() sono sincronizzati in java.io.InputStream?

+0

Presumibilmente perché le corse possono verificarsi tra il segno e il reset, ma non leggere. – aioobe

+0

È un po 'strano considerando che quei metodi non fanno nulla InputStream. Se guardi ByterrayInputStream che supporta mark/reset, vedrai che molti metodi sono sincronizzati, anche se il metodo 'mark' non lo è (che è un po 'un enigma per me) ... – assylias

+0

Il metodo read per' BufferedInputStream 'è' sincronizzato' – Ian2thedv

risposta

4

java.io.InputStream è una classe astratta. Ha un'implementazione predefinita per mark/reset che genera un'eccezione al reset che dice che non è supportato in modo che le sottoclassi che non lo supportano non debbano codificare il proprio metodo per lanciare l'eccezione. "sincronizzato" non è utile per il caso predefinito, per generare un'eccezione.

Qualsiasi sottoclasse che lo supporta dovrà sostituire quei metodi e la sincronizzazione non è ereditata, quindi i metodi sovrascritti potrebbero essere sincronizzati o meno.

Penso che non abbia alcun effetto.

Immagino che sia un difetto di progettazione senza conseguenze o forse è un avvertimento in modo che i programmatori lo sottoclassi per sincronizzare anche quei metodi perché dovrebbe essere fatto in quel modo.

Problemi correlati