4

[B@6c89db9aこの値をMySQLデータベースに文字列表現として保存した値を持つバイト配列があります-mybyteArray.toString()

データベースから保存された値を取得し、元のバイト配列の文字列値を使用して新しいバイト配列を作成したいと考えています。

Java Byte Array to String to Byte Arrayの例を試しました

およびバイトから文字列へ、およびその逆

ただし、元のバイト配列値を取得していません。違う価値を生み出しています。誰でもアドバイスできますか?

4

4 に答える 4

11

[B@6c89db9a この値を保存しました ... という値のバイト配列があります。

それは値ではありません。これは (Java 以外では) まったく役に立たないハッシュコードです。配列のtoString()メソッドは、配列の内容を出力しませ。配列はオーバーライドtoString()されないため、Object.toString()呼び出されます。

MySQL に任意のバイトの配列を格納したい場合は、BLOBタイプを使用する必要があります (または、MySQL を使用VARBINARYしてからしばらく経ちましたが、簡単なグーグルから表示されますが、それらは基本的に最新バージョンでも同じです)。テーブルに、バイトを保存します。

テーブルの作成例 (some_bytes BLOB);

準備されたステートメントは次のようになります。

String query = "INSERT INTO example (some_bytes) VALUES (?)";
PreparedStatement pstmt = conn.prepareStatement(query);

そして、これらのバイトを次の方法で挿入します。

pstmt.setBytes(1, myByteArray);
pstmt.execute();

コメントから追加する編集:配列にいくつかのバイトがあります。これらのバイトが文字列を表し、文字セットが何であるかを知っている場合は、文字セットを取るコンストラクターをString使用してそれらを に変換します。String

String myString = new String(bytes, knownCharset); 

たとえば、UTF-8 文字列を表す場合は、次のように使用します。

String myString = new String(byteArray, Charset.forName("UTF-8"));
于 2013-07-06T00:10:13.477 に答える
0

によるとObject.toString()-

オブジェクトの文字列表現を返します。一般に、toString メソッドは、このオブジェクトを「テキストで表す」文字列を返します。結果は、人が読みやすい簡潔で有益な表現でなければなりません。すべてのサブクラスでこのメソッドをオーバーライドすることをお勧めします。

クラス Object の toString メソッドは、オブジェクトがインスタンスであるクラスの名前、アットマーク文字 `@'、およびオブジェクトのハッシュ コードの符号なし 16 進数表現で構成される文字列を返します。

つまり、このメソッドは次の値に等しい文字列を返します。

getClass().getName() + '@' + Integer.toHexString(hashCode())

したがって、保存しているものには、バイト配列の実際の値は含まれていません。

于 2013-07-06T00:02:27.197 に答える
0

以下の 2 つの機能を試して、変換ジョブを完了することができます。

    public static byte[] toBytes(String s) {
    try {
      return s.getBytes("UTF-8");
    } catch (UnsupportedEncodingException e) {
      System.out.println("UTF-8 not supported?", e);
      return null;
    }
    } 

      public static String toString(final byte [] b, int off, int len) {
          if (b == null) {
             return null;
          }
          if (len == 0) {
             return "";
          }
          try {
            return new String(b, off, len, "UTF8");
          } catch (UnsupportedEncodingException e) {
          System.out.println("UTF-8 not supported?", e);
          return null;
          }
      }
于 2013-07-06T00:36:54.567 に答える