[ Top ] > [ Communication ] > [ study ] > [ Java ]
>バッファ
a
 
 

バッファ

05/02/13
byte[ ] buf = new byte[ 32 ];
String str = "ああああああああ";
buf = str.getBytes( );

この例は、Stringクラスにある、getBytesメソッド がStringオブジェから byte型の配列にして返すので、最初に作成した byte型の配列 buf に入れています。
これは、正しいように見えますが、実際はまずいようです。
コンパイルエラーにもなりません。

String str = "ああああああああ";
byte[ ] buf = str.getBytes( );

こっちならいいみたい。

a

と、思ったら(05/02/11)追加

byte[ ] buf = new byte[ 8 ]; //要素数8の配列を作成
buf = "あああ"; //2バイト文字3つ
System.out.println( buf.length ); //6 が表示される
String str = "ああああああああ";
buf = str.getBytes( ); //Stringオブジェをbyte型の配列として返す
System.out.println( buf.length ); //16 が表示される

自動で大きくなるんでしょうか・・・・。
たぶんこれは今の私自身の推測ですが、配列のコピーに当たるんじゃないでしょうか。

たとえば・・・

class arrayCopy{


	public static void main(String args[]){
	  int[] Array = new int[4];
	  int[] Array2 = new int[10];
	
	  for(byte i = 0; i < 4;i++){
  		Array[i] = i;
  		System.out.println("Array[" + i + "]:" + Array[i]);
  	}
  	for(byte i = 0; i < 10;i++){
  		Array2[i] = i;
  		System.out.println("Array2[" + i + "]:" + Array2[i]);
  	}
  	System.out.println("ArrayをArray2に代入");
  	Array = Array2;
	
  	for(byte i = 0; i < 10;i++){
  		System.out.println("Array[" + i + "]:" + Array[i]);
  	}
	}
}			

 

Array[0]:0
Array[1]:1
省略

Aarray[0]:0
Aarray[1]:1
省略

Array[9]:9

と、Array の要素数が 10 に増えています。これは、配列のメモリアドレスをコピーした。と、いう感じでしょうか。
よって、代入した後 Array の、たとえば、2の要素の値を変更するとArray2 の、2の要素の値も変更されます。

よって、
buf = str.getBytes( );
は、文字列 str をbyte配列としてメモリ空間上に作成し、そのアドレスを返す。
みたいな意味合いになるんじゃないかなぁ。と、思うのですが・・・。
この辺はよくわかりません。
なんか、よくわからない分バッファオーバーフローがどこかで起こるんじゃないかって思っちゃいます。

| fstyle | <<Pre | TOP | List | Next>> |