2015-06-11 4 views
8

Verstehe nicht, warum mark() und reset() synchronisiert sind und warum read() nicht?Warum nur mark() und reset() in java.io.InputStream synchronisiert werden?

+0

Vermutlich weil Rennen zwischen Mark und Reset auftreten können, aber nicht gelesen werden. – aioobe

+0

Es ist ein bisschen seltsam, wenn man bedenkt, dass diese Methoden nichts InputStream machen. Wenn Sie sich ByterrayInputStream anschauen, der mark/reset unterstützt, werden Sie sehen, dass die meisten Methoden synchronisiert sind, obwohl die 'mark' Methode nicht ist (was ein bisschen ein Rätsel für mich ist) ... – assylias

+0

Die Lesemethode für den 'BufferedInputStream 'ist' synchronisiert' – Ian2thedv

Antwort

4

java.io.InputStream ist eine abstrakte Klasse. Es verfügt über eine Standardimplementierung für mark/reset, die beim Zurücksetzen nur eine Ausnahme auslöst, die nicht unterstützt wird, so dass Unterklassen, die dies nicht unterstützen, keine eigene Methode codieren müssen, die die Ausnahme auslöst. "synchronisiert" ist für den Standardfall nicht nützlich, um eine Ausnahme auszulösen.

Jede Unterklasse, die dies unterstützt, muss diese Methoden überschreiben und die Synchronisation wird nicht übernommen, sodass die überschriebenen Methoden synchronisiert werden können.

Ich denke, es hat keine Wirkung.

Ich denke, es ist ein Design-Fehler ohne Folgen oder vielleicht ist es eine Warnung, so dass Programmierer, die Unterklasse es diese Methoden auch zu synchronisieren, weil es so gemacht werden sollte.

Verwandte Themen