2017-08-28 1 views
2

Ich habe ein Problem, wie man Bytedaten behandelt, ohne sie zu beschädigen. Hier ist mein CodeWie man Byte-Datenstrom ohne korrumpierende Daten behandelt

... 
byte[] b = new byte[1000]; 

// read input stream 
BufferedInputStream inData = new BufferedInputStream(socket.getInputStream()); 
int length = inData.read(b); 

String data = new String(b, 0, length); 
if (Log4j.log.isEnabledFor(Level.INFO)) { 
    Log4j.log.info("Data Length: " + length 
      + ", Received data: " + data); 
} 

... 
// start a new socket to other server 
... 
BufferedOutputStream out = new BufferedOutputStream(remote.getOutputStream()); 

out.write(data.getBytes()); 
out.flush(); 
... 

Es scheint kein Problem hier. Aber wenn ich einen Hex-String bekam wie

F8 F0 F0 C2 20 00 00 80 00 00 

wenige Daten wie C2 wird in 3F gedreht werden. Ich konnte dies auch in meinem Protokoll & Remote-Server-Protokoll sehen.

Zuerst vermute ich, dass es der Überlauf sein wird. Da diese Daten jedoch als Hex-String behandelt und an einen anderen Server gesendet werden, wird dieser Verdacht durchkreuzt.

Ich habe keine Ahnung, was hier vor sich geht, also könnte ich wirklich Hilfe gebrauchen, wenn jemand dieses Problem kennt.

Antwort

3

Im Moment konvertieren Sie die Bytes in eine String mit dem Standard-Zeichensatz der Plattform und rufen dann später getBytes() zurück. Wenn die Bytes keine gültige Zeichenfolge in diesem Zeichensatz darstellen, gehen Daten verloren, z. Die ungültigen Bytes werden durch das Zeichen '?' ersetzt.

Hör auf damit. Wenn Sie Bytes haben, übergeben Sie sie als byte[]. Konvertieren Sie sie zu keinem Zeitpunkt in eine String.

+0

Ah, du hast recht! Meine andere Testzeichenkette hat es korrekt bestanden, also dachte ich, dass mein Code nichts falsches hat. – Kaninchen

Verwandte Themen