- - PR -
バイトシーケンスの操作
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-01-19 01:27
http://itpro.nikkeibp.co.jp/article/COLUMN/20060417/235453/
上記ページを参照してByteBufferクラスのpositionやlimitを使って指定した バイト数だけ文字列を取得できるのではないかと思い下記のようにコードを書いてみました。 文字列「cd」だけ抜き出そうと思ったのですが(substring使えばという突っ込みは 抜きにして・・・)下記やり方では 「abcdef」の全部が取れてしまいました。やり方がまずいのでしょうか? public class test1 { public static void main(String args[]) { byte[] x = "abcdef".getBytes(); ByteBuffer buffer = ByteBuffer.wrap(x); buffer.position(2); buffer.limit(3); System.out.println(new String(buffer.array())); } } | ||||
|
投稿日時: 2007-01-19 01:43
この場合、buffer.array() は ByteBuffer.wrap(byte[]) で引数に渡された配列そのものを返します。
> 「abcdef」の全部が取れてしまいました。 それが文書通りの挙動だと思われます。 | ||||
|
投稿日時: 2007-01-21 19:32
返答ありがとうございます。
バイト文字列の任意の場所を切り出す方法を試したく思い下記のように 試してみました。 ByteBufferクラスのgetメソッドのリファレンスを見ると 「このメソッドは、このバッファの現在位置から length バイトを指定された 配列の指定されたオフセット位置へコピーします。」とあるので position()メソッドでオフセットを2バイト目に設定したあと getメソッドにてy配列にオフセット位置である2バイト目から2バイト分切り出して y配列に格納しようとしました。 その結果表示された結果は 予想:"bc"に対して 結果:"/" "/a" "/ab" と表示されました。 うまく切り出すにはどうすればよいでしょうか。
| ||||
|
投稿日時: 2007-01-21 20:16
提示されているコードでは IndexOutOfBoundsException が投げられるはずなんですが……
> buffer.get(y,2,2); この呼び出しですが、
> うまく切り出すにはどうすればよいでしょうか。 とりあえず、落ち着いてドキュメントを きちんと読んでみてはいかがでしょう。 |
1