网络I/o编程模型5 Nio之buffer的操作和常用方法
Posted 健康平安的活着
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络I/o编程模型5 Nio之buffer的操作和常用方法相关的知识,希望对你有一定的参考价值。
一 理解buffer的flip方法和clear方法
1.1 flip方法
1.2 clear方法
1.3 代码案例
1.代码
public class RandomBuffer
public static void main(String[] args)
Random random = new Random();
IntBuffer buffer = IntBuffer.allocate(5);
buffer.put(1);
buffer.put(2);
buffer.put(3);
buffer.put(4);
buffer.put(5);
buffer.clear();
while (buffer.hasRemaining())
buffer.put(random.nextInt());
buffer.flip();
while (buffer.hasRemaining())
System.out.println(buffer.get());
2.没有执行clear方法前
3.执行clear方法后:
二 buffer的案例操作
2.1 设置为只读buffer
1.代码
package com.ljf.netty.nio;
import java.nio.ByteBuffer;
/**
* @ClassName: ReadOnlyBuffer
* @Description: TODO
* @Author: liujianfu
* @Date: 2022/05/14 17:40:21
* @Version: V1.0
**/
public class ReadOnlyBuffer
public static void main(String[] args)
//创建一个buffer
ByteBuffer buffer=ByteBuffer.allocate(64);
for(int i=0;i<10;i++)
buffer.put((byte)i);
//读取切换,从写切换到读
buffer.flip();
//得到一个只读的Buffer
ByteBuffer readOnlyBuffer=buffer.asReadOnlyBuffer();
System.out.println("可读:"+readOnlyBuffer.getClass());
while (readOnlyBuffer.hasRemaining())
System.out.println("du:"+readOnlyBuffer.get());
//这个时候再向里面添加,则报错!!!
readOnlyBuffer.put((byte)100);
2.查看结果
2.2 MappedByteBuffer在内存中修改内容
MappedByteBuffer 可让文件直接在内存(堆外内存)修改,操作系统不需要拷贝一次。
1.代码
package com.ljf.netty.nio;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
/**
* @ClassName: RandomAccessFileDemo
* @Description: TODO
* @Author: liujianfu
* @Date: 2022/05/14 17:58:16
* @Version: V1.0
**/
public class RandomAccessFileDemo
public static void main(String[] args) throws IOException
RandomAccessFile randomAccessFile=new RandomAccessFile("d:/liu.txt","rw");
//获取对应的通道
FileChannel channel=randomAccessFile.getChannel();
/**
参数1:设置模式
参数2:起始位置
参数:加载到内存的内容个数,不是索引
*/
MappedByteBuffer mappedByteBuffer=channel.map(FileChannel.MapMode.READ_WRITE,0,10);
//修改索引0,3 位置上的内容
mappedByteBuffer.put(0,(byte)'t');
mappedByteBuffer.put(3,(byte)'9');
randomAccessFile.close();
System.out.println("修改成功!!!");
2.看效果
以上是关于网络I/o编程模型5 Nio之buffer的操作和常用方法的主要内容,如果未能解决你的问题,请参考以下文章