Natürlich kann es für eine beliebig lange Zeit blockieren ...
Sie können eine Hilfsmethode erstellen, um einen Puffer vollständig zu füllen. Etwas wie das:
%Vor% Dann müssen Sie nur einen Puffer der Größe x
übergeben.
Michael hat einen Link zu einer Funktion gepostet, die im Wesentlichen dasselbe tut. Der einzige Unterschied zu meinem ist, dass es weniger als die Pufferlänge zurückgeben kann, aber nur unter der Bedingung eines End-of-Stream. DataInputStream.readFully
würde in diesem Szenario eine Laufzeitausnahme auslösen.
Also lasse ich meine Antwort, falls ein Beispiel für dieses Verhalten nützlich ist.
Das ist unmöglich. Die zugrunde liegenden Plattformen können dies nicht garantieren, also auch nicht Java. Sie können versuchen, n Bytes zu lesen, aber Sie müssen immer darauf vorbereitet sein, dass Sie weniger als das bekommen, was angefordert wurde.
DataInputStream.readFully () wirft eine Ausnahme auf EOF, wie Mark Peters darauf hinweist. Aber es gibt zwei andere Methoden, die das nicht tun: Commons IO's IOUtils.read () und Guavas ByteStreams.read () . Diese beiden versuchen, bis zu N Bytes zu lesen, stoppen nur bei EOF und geben zurück, wie viele sie tatsächlich lesen.