2016-12-31 8 views
0

私はJDBCを使用してMySqlデータベースからBLOBを読み込んでいます。私は得られたバイト配列が良いことを知っている、私は各バイトの数字の文字列リテラルとしてHTTPを介して送信し、正常に結果(jpg)をダウンロードしました。 (単にmysql - > javaサーブレットデータが良いことを証明するため)。私のJava Stringの長さは、生成されたbyte []配列よりも短いのはなぜですか?

このバイト配列からUTF-8を使用して新しい文字列を作成すると、文字列の長さがバイト配列よりも短くなり、値を解読できなくなります。 UTF-8が1文字あたり最低1バイトの場合、生成される文字列は、生成されるバイト配列の長さの最小値になるべきではありませんか? (この特定の例では、バイト長は12,079,474であり、結果の文字列長は11,501,845です)

ありがとうございました!

+2

あなたは自分の声明と矛盾しています。複数のバイトがcharを作成する場合、charの長さは小さくなります。また、ここ[見て](http://stackoverflow.com/questions/16270994/difference-between-string-length-and-string-getbytes-length) – GurV

+3

.jpgはテキストではなく、バイナリデータです。 jpgイメージのバイトを文字列として解釈しようとするのは意味がありません。 – nos

+0

バイナリデータが文字列として必要な場合は、各バイトを16進数に変換して双方向の操作を行うことを検討してください。 – Bohemian

答えて

0

バイトでは、連続バイトとして解釈されるデータがあります。つまり、UTF-8では特殊な意味を持ち、複数のバイトから1つのUnicode文字を形成します。あなたの文字列がバイト数よりも短い理由です。

関連する問題