后期整理
package Demo1;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class FileChannalDemo {
public static void main(String[] args) {
try {
RandomAccessFile aFile = new RandomAccessFile("D:\\2.txt", "rw");
FileChannel inChannel = aFile.getChannel();
ByteBuffer buf = ByteBuffer.allocate(48);//创建一个可存储空间为48字节的缓冲区
//CharBuffer cuf = CharBuffer.allocate(48);创建一个可存储空间为48字符的缓冲区
//从Channel写入到buffer
int bytesRead = inChannel.read(buf);
while(bytesRead !=-1 )
{
System.out.println("read:"+bytesRead);
buf.flip();//翻译为翻转,但理解更偏向于重置,将limit重置为poistion,将poistion重置为0;
while(buf.hasRemaining())
{
System.out.println((char)buf.get()+"===");//从缓冲区中读入一个字节
}
buf.clear();
//一旦读完Buffer中的数据,需要让Buffer准备好再次被写入。可以通过clear()或compact()方法来完成。
//如果调用的是clear()方法,position将被设回0,limit被设置成 capacity的值。换句话说,Buffer 被清空了。Buffer中的数据并未清除,只是这些标记告诉我们可以从哪里开始往Buffer里写数据。
//如果Buffer中有一些未读的数据,调用clear()方法,数据将“被遗忘”,意味着不再有任何标记会告诉你哪些数据被读过,哪些还没有。
bytesRead = inChannel.read(buf);
}
aFile.close();//RandomAccessFile可以关闭飞空通道
} catch (Exception e) {
e.printStackTrace();
}
}
}