四、NIO的核心API

buffer 中写入数据 [写模式 创建一个 bytebuffer ,clear (),compact ()]

Copy
channel.read(buffer)
2. buffer的put方法
buffer.put(byte) buffer.put((byte)'a')..
buffer.put(byte[])

从 buffer 中读出数据

Copy
1. channel的write方法

2. buffer的get方法 //每调用一次get方法会影响，position的位置。

3. rewind方法(手风琴)，可以将postion重置成0 ，用于复读数据。

4. mark&reset方法，通过mark方法进行标记（position），通过reset方法跳回标记，从新执行.

5. get(i) 方法，获取特定position上的数据，但是不会对position的位置产生影响。

字符串操作

字符串存储到 Buffer 中

Copy
ByteBuffer buffer = ByteBuffer.allocate(10);
buffer.put("sunshuai".getBytes());

buffer.flip();
while (buffer.hasRemaining()) {
System.out.println("buffer.get() = " + (char)buffer.get());
}
buffer.clear();

ByteBuffer buffer = Charset.forName("UTF-8").encode("sunshuai");

1、encode方法自动 把字符串按照字符集编码后，存储在ByteBuffer.
2、自动把ByteBuffer设置成读模式，且不能手工调用flip方法。

ByteBuffer buffer = StandardCharsets.UTF_8.encode("sunshuai");

while (buffer.hasRemaining()) {
System.out.println("buffer.get() = " + (char) buffer.get());
}
buffer.clear();
1、encode方法自动 把字符串按照字符集编码后，存储在ByteBuffer.
2、自动把ByteBuffer设置成读模式，且不能手工调用flip方法。

ByteBuffer buffer = ByteBuffer.wrap("sunshuai".getBytes());
while (buffer.hasRemaining()) {
System.out.println("buffer.get() = " + (char) buffer.get());
}
buffer.clear();

Buffer 中的数据转换成字符串

Copy
ByteBuffer buffer = ByteBuffer.allocate(10);
buffer.put("孙".getBytes());

buffer.flip();
CharBuffer result = StandardCharsets.UTF_8.decode(buffer);
System.out.println("result.toString() = " + result.toString());