以下のJavaコード:
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
public class Test {
public static void main(String args[]) throws IOException {
SocketChannel c = SocketChannel.open();
c.connect(new InetSocketAddress("google.com", 80));
ByteBuffer b = ByteBuffer.allocate(1024);
b.put("Request".getBytes());
System.out.println("Write: " + c.write(b));
int i;
while ((i = c.read(b)) != -1) {
System.out.println("Read: " + i);
b.clear();
}
}
}
実結果:
書き込み:1017読み取り:0読み取り:1024読み取り:44
初めて、メソッドread()
は0バイトを読み取りました。かっこいいじゃない。
コードを変更しました:
b.put("Request".getBytes());
System.out.println("Write: " + c.write(b));
b.flip(); //I added this line
int i;
while ((i = c.read(b)) != -1) {
System.out.println("Read: " + i);
b.clear();
}
実績:
書き込み:1017読み取り:1024読み取り:44
すでに良く見えます。これをありがとうflip()
!
次に、バッファ文字列"Request"に入れます。この文字列の長さは7ですが、メソッドは1017write()
を返しました。
どのような情報方法がチャネルに書き込まれましたか?
そのメソッドが文字列「Request」を書き込んだかどうかはわかりません。
わかりました。コードをもう一度変更しました。
b.put("Request".getBytes());
b.flip(); // I added this line
System.out.println("Write: " + c.write(b));
b.flip();
int i;
while ((i = c.read(b)) != -1) {
System.out.println("Read: " + i);
b.clear();
}
実績:
書き込み:7
とコードがクラッシュしました...
なぜですか?私の間違いはどこにありますか?
ありがとう。