Wie lese ich x Bytes aus einem Stream?

8

Ich möchte genau n Bytes von einem Socket gleichzeitig lesen. Wie kann ich das erreichen?

    
Glenn 03.11.2011, 21:08
quelle

4 Antworten

9

DataInputStream.readFully()

Natürlich kann es für eine beliebig lange Zeit blockieren ...

    
Michael Borgwardt 03.11.2011, 21:13
quelle
3

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.

Bearbeiten

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.

    
Mark Peters 03.11.2011 21:20
quelle
1

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.

    
Perception 03.11.2011 21:11
quelle
1

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.

    
Alexander Torstling 30.04.2013 06:29
quelle

Tags und Links