4

重複の可能性:
Javaバイト配列から文字列、バイト配列

Stringパラメーターを受け入れるREAD()というメソッドがあります。この文字列はすでにバイトに変換されています。私が欲しいのは、読み取り可能な文字列に変換することだけです。

public static String READ(final String data) throws UnsupportedEncodingException{
   char[] temp = data.toCharArray();
   byte[] bytes = new byte[temp.length];
   int i = 0;
        
   for(char c : temp){
      bytes[i++] = (byte)c;
   }
        
   return new String(bytes, "UTF-8");
}

public static String SEND(String data) throws UnsupportedEncodingException{
   return data.getBytes()+"";
}

テスト:

String msg = "testing !";
String msgBytes = null;
   try {
        msgBytes = SEND(msg);
   } catch (UnsupportedEncodingException e2) {
        e2.printStackTrace();
   }
        
   System.out.println( "SEND: " + msgBytes);
   try {
         System.out.println("RECEIVE: " + READ(msgBytes));
   } catch (UnsupportedEncodingException e2) {
            e2.printStackTrace();
   }

そして、出力は次のとおりです。

送信:[B @ 452467ec

受信:[B @ 452467ec

4

2 に答える 2

2

文字列byte[]には、引数を取るコンストラクタがあります。

String(byte [] bytes)-プラットフォームのデフォルトの文字セットを使用して、指定されたバイト配列をデコードすることにより、新しい文字列を構築します。

String(byte [] bytes、Charset charset)-指定された文字セットを使用して、指定されたバイト配列をデコードすることにより、新しい文字列を作成します。

したがって、次のように印刷します。

System.out.println(new String(msgBytes, "UTF-8"));

現在表示されているのは、バイト配列へのメモリ参照を出力するデフォルトですObject.toString()(すべての配列はから拡張されますObject)。

于 2013-01-22T19:55:34.773 に答える
1

であるabyte[]を出力します。これは、のデフォルトの実装が行うことであるためObject、参照をそのメモリに出力するだけです。ObjecttoString()

直接印刷する必要がありますStringbyte[]その表現を印刷しないでください。

コードで行うことは、をに変換しStringてから、間違った方法で元にbyte[]戻すことです。String

于 2013-01-22T19:56:20.993 に答える