忍者ブログ
[209] [208] [207] [206] [205] [204] [203] [202] [201] [200] [199]

DATE : 2017/09/20 (Wed)
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


DATE : 2006/11/15 (Wed)

java.lang.String#getBytes(String) メソッドを使うと、文字列を特定のエンコーディングに変換することができます。例えば、文字列 string を UTF-8 に変換するコードは次のようになります。

byte[] utf8 = string.getBytes("UTF8");

それに対して、java.nio.Charset などの New I/O を用いて文字列 string を UTF-8 に変換する場合は、次のようになります(ここでは、java.nio.Charset を使用した場合を示します)。

ByteBuffer utf8 = Charset.forName("UTF-8").encode(string);

byte 配列ではなく java.nio.ByteBuffer として返されるので、New I/O を使う際にはこちらを使った方が見通しが良くなります。

ただし、その結果返された ByteBuffer を操作する際には注意が必要です。

ByteBuffer は固定長のバイト列を表すオブジェクトで、バイト長を表す要素として「容量」と「リミット」があります。前者は ByteBuffer そのものの長さ、後者はバッファの読み書きを禁止し始める位置を表します。また、容量は ByteBuffer#capacity() で、リミットは ByteBuffer#limit() で取り出すことができます。

ここで、Charset#encode(String) で変換されたバイト長を表すのはリミットです。Charset#encode(String) で生成された ByteBuffer なので一見すると容量イコール変換されたバイト長のように思えます。しかし、変換されたバイト列を調べてみると、リミット以降はただ単に0が格納されていました。

PR
●この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
●この記事へのトラックバック
この記事にトラックバックする:
忍者ブログ [PR]
ブログ内検索
最近の状況
リンク
カレンダー
08 2017/09 10
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)
ブログ内検索
最近の状況
リンク
カレンダー
08 2017/09 10
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)