2017-08-28 18 views
2

バイトデータを破損させずに処理する方法が問題になりました。ここに私のコードですデータを破損することなくバイトストリームを処理する方法

... 
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(); 
... 

ここでは何も問題はないようです。私はC2よう

F8 F0 F0 C2 20 00 00 80 00 00 

少数のデータのような16進文字列を得た場合でも、3Fに変換されます。私はこれを私のログ&リモートサーバのログにも見ることができました。

まず、オーバーフローすると思われます。しかし、これらのデータは16進文字列として扱われ、別のサーバーに送信されるため、この疑いが克服されます。

私はこれについて何が起こっているのか分からないので、誰かがこの問題について知っていれば、本当に助けをすることができます。

答えて

3

今では、プラットフォームのデフォルトの文字セットを使用してStringにバイトを変換してから、後でを呼び出します。バイトがその文字セットの有効な文字列でない場合、データは失われます。無効なバイトは文字'?'に置き換えられます。

これを停止します。バイトがある場合は、それをbyte[]として渡します。どの時点でもStringに変換しないでください。

+0

ああ、そうですよ!私の他のテスト文字列が正しく渡されたので、私のコードに間違いがないと思った。 – Kaninchen

関連する問題