2017-01-21 3 views
0

Ein Server sendet mir eine int nach:Wie erhält man eine wahre Byte-Reihenfolge mit BufferedInputStream.read()?

DataOutputStream stdOut = new DataOutputStream(myServerSocket.getOutputStream()); 
stdOut.writeInt(1); 
stdOut.flush(); 

ich versuche, es von meinem Klienten zu lesen mit:

BufferedInputStream dIn = new BufferedInputStream(myClientSocket.getInputStream()); 
byte[] reception  = new byte[4]; // writeInt() writes 4 bytes 
int status    = -1; 

status = dIn.read(reception, 0, 4); 
// status = 1 
// (int) reception = 0 

ich für 4 Byte warte die gesendete Int zu berechnen. Es empfängt jedoch nur 1 Byte und behandelt es, ohne die verbleibenden Bytes zu warten. Weil ich für 4 Bytes warten, habe ich versucht, dies dann:

int count = 0; 
while(count < 4) { 
    status = dIn.read(reception); 
    count += status; 
    System.out.println("Read: " + count); 
}*/ 

Ich sehe, dass es 1 Byte dann 3 Bytes liest.

  • Enventually, wenn ich die HEX Ergebnis drucken, erhalte ich: 00 00 01 00.
  • Es scheint, dass es, was wie folgt aus (in dieser Reihenfolge) gesendet: 00 00 00 01
  • und erhielt in zwei Teile: 00, dann 00 00 01
  • Welche wie gespeichert wurde: 00 00 01 00.

ist, warum ich nicht int 1.

    erhalten
  1. Welchen Zweck hat das Lesen (Bytes, 0, 4), wenn es nicht auf 4 Bytes wartet?
  2. Wie bekomme ich einfach meine 4 Bytes in der richtigen Reihenfolge?

Hinweis: wenn der Client Datainputstream, eine readInt() funktioniert gut ...

+1

Ich bin mir nicht sicher, ob ich Ihre Frage verstehe. Wenn DataInputStream das von Ihnen benötigte Verhalten aufweist, verwenden Sie es. –

+0

1. Die 4 gibt die maximale Anzahl der zu übertragenden Bytes an, wie im Javadoc eindeutig angegeben. 2. Ihre Leseschleife hat einen Fehler, den 'readInt()' nicht hat. Unklar, warum Sie nicht den Code verwenden, der funktioniert, und das ist symmetrisch mit dem Absender. – EJP

+0

Ich habe in diesem Forum gelesen, dass BufferedInput/OutputStream schneller war. Ich wollte es vergleichen. – Anduriel

Antwort

2

ein DataInputStream und seine readInt() Methode verwenden.

DataInputStream dIn = new DataInputStream(new BufferedInputStream(myClientSocket.getInputStream())); 
int status = dIn.readInt(); 
+0

Danke, es scheint zu funktionieren! In der Tat, ich wusste nicht die Syntax zu verwenden, ich habe BufferedStream ohne DataStream verwendet ... – Anduriel

Verwandte Themen