NIO 세 가지 핵심 요소 ---- 완충액 (버퍼)

완충기:

버퍼가 실질적으로 메모리 블록 읽을 수되고 기록 데이터가, 객체가 더 쉽게 메모리 블록을 사용할 수있는 방법들의 세트를 제공한다 (어레이 포함) 컨테이너 객체 인 것으로 이해 될 것이며, 오브젝트 버퍼 내장 메커니즘 다수 트랙 버퍼 영역의 상태 천이를 기록하기 위해, 채널은 판독 된 데이터 파일, 네트워크 채널을 제공그러나 데이터의 읽기 나 쓰기 버퍼를 통해 이루어져야합니다

버퍼 클래스와 서브 클래스

1.Buffer 일곱 하위 범주가 부울 유형뿐만 아니라,있다, 최상위 부모 클래스, 그것은 추상 클래스입니다, 다른 기본 데이터 유형은 버퍼의 서브 클래스는, 가장 일반적인의 ByteBuffer입니다
2.buffer에게 정보를 제공하기 위해 네 가지 속성 이는 정보의 데이터 요소를 포함
용량의 버퍼가 생성 불변 설정된 용량 :
한계 : 현재의 버퍼의 끝 나타내는
위치 인덱스의 다음의 판독 또는 기록의 총수 :
마크 : 마크

버퍼 유형은 일반적으로 방법을 사용

그림 삽입 설명 여기
ByteBuffer를 가장 일반적으로 사용되는 방법 다음
그림 삽입 설명 여기
다음 목록은 버퍼 예제로 읽어 :

package com.jym.nio;

import java.nio.IntBuffer;

/**
 * @program: JymNetty
 * @description: 举例说明Buffer的使用
 * @author: jym
 * @create: 2020/01/31
 */
public class JymBuffer {
    public static void main(String[] args) {
        // 创建一个Buffer,大小为5,即可以存放5个int
        IntBuffer intBuffer = IntBuffer.allocate(5);
        // 向Buffer存放数据, intBuffer.capacity()为buffer的容量,put方法为存放
        for(int i = 0; i<intBuffer.capacity();i++){
            intBuffer.put(i+10);
        }
        // 如何取出数据
        // 将buffer转换,读写切换,intBuffer.hasRemaining() 判断buffer里是否有数据
        intBuffer.flip();
        while (intBuffer.hasRemaining()){
            System.out.println(intBuffer.get());
        }
    }
}

그것은 주목해야한다 :, 읽기, 쓰기 및 방법 플립 스위칭 호출해야 할 때 ()

당신은 시간을 추가하거나 읽을 때마다, 위치 1은 한계까지 최대 증가

버퍼 참고 :

풋의 1.ByteBuffer 지원 유형과는 어떤 유형에 투입, 해당 데이터 유형을 제거하는 데 사용되어야한다 GET 얻을, 또는 비정상적인 BufferUnderflowException을 할 수 있습니다
(2) 읽기 전용의 경우 단지에 일반 버퍼 버퍼로 변환 할 수 있습니다 버퍼의 추가 요소를 읽는 생산한다(자) ReadOnlyBufferException
코드 설명 :

package com.jym.nio;

import java.nio.ByteBuffer;

/**
 * @program: JymNetty
 * @description: Buffer注意事项
 * @author: jym
 * @create: 2020/02/01
 */
public class JymFileChannle4 {
    public static void main(String[] args) {
        ByteBuffer byteBuffer = ByteBuffer.allocate(10);
        // 读取的时候也一定要按照顺序读取,比如要指定类型,否则可能会出错
        byteBuffer.putChar('A');
        byteBuffer.putInt(3);
        byteBuffer.putShort((short) 4);
        byteBuffer.putLong(10086);


        // 转换成只读Buffer
        ByteBuffer readOnlyBuffer = byteBuffer.asReadOnlyBuffer();
        // 添加元素会报错ReadOnlyBufferException
        readOnlyBuffer.put((byte) 1);
    }
}

잘못 공부 시간의 부족, 너무 얕은 지식, 용서해주십시오.

세계에서 사람들이 10 종류가 있습니다, 하나의 바이너리 이해하는 것입니다, 하나는 바이너리 이해하지 않습니다.

게시 71 개 원래 기사 · 원의 찬양 (54) · 전망 420 000 +

추천

출처blog.csdn.net/weixin_43326401/article/details/104138593