FileChannel(API详解)

public enum StandardOpenOption implements OpenOption {

READ,

WRITE,

APPEND,//累加

TRUNCATE_EXISTING,//如果该文件已存在并且为写入访问而打开,则其长度将被截断为0。如果只为读取访问打开文件,则忽略此选项。

CREATE,//不能单独使用,要与WRITE配套使用,单独使用会报错java.nio.file.NoSuchFileException,如果文件已存在,重复创建不会报错

CREATE_NEW,//不能单独使用,要与WRITE配套使用,如果文件已存在,则出现异常java.nio.file.FileAlreadyExistsException

DELETE_ON_CLOSE,

SPARSE,//稀疏文件,空闲位置不占内存(不要使用CREATE来创建稀疏文件)

SYNC,//要求对文件内容或元数据的每次更新都同步写入底层存储设备。如果这样做,程序运行的效率就降低了。

DSYNC;//要求对文件内容的每次更新都同步写入底层存储设备。

//枚举常量SYNC与DSYNC的区别:SYNC更新内容与元数据,而DSYNC只更新内容,与force(boolean)方法作用一样。

}

从io流中获得通道getChannel()

FileChannel inchannel = new FileInputStream(“a.txt”).getChannel();

FileChannel outchannel = new FileOutputStream(“b.txt”).getChannel();

FileChannel inchannel1 = new RandomAccessFile(“a.txt”,“r”).getChannel();

FileChannel outchannel1 = new RandomAccessFile(“a.txt”,“rw”).getChannel();

2、read


ByteBuffer buffer = ByteBuffer.allocate(10);

ByteBuffer buffer1 = ByteBuffer.allocate(10);

ByteBuffer[] buffers = {buffer,buffer1};

channel2.read(buffer);//将字节序列从此通道的当前位置读入给定的缓冲区的当前位置,方法同步,返回值正数为读取的字节数,0为未读取到数据,可能是缓冲区中没有剩余空间了,-1是到了流的末端

channel2.read(buffer,2);//position代表通道的位置

channel2.read(buffers);//将通道当前位置的字节序列读入多个ByteBuffer缓冲区的remaining剩余空间中,方法同步

channel2.read(buffers,0,8);//offset代表数组的下表,length为向后的缓冲区个数

3、write


ByteBuffer buffer2 = ByteBuffer.wrap(new byte[]{1,2,3,4});

ByteBuffer buffer3 = ByteBuffer.wrap(new byte[]{11,21,31,41});

ByteBuffer[] buffers1 = {buffer2,buffer3};

channell.write(buffer2);//将一个缓冲区中remaining字节序列写入通道的当前位置,write方法同步

channell.write(buffer2,2);//将一个缓冲区中remaining字节序列写入通道的指定位置,此方法不改变痛的位置,write方法同步

channell.write(buffers);//将多个缓冲区中的remaining剩余字节序列写入通道的当前位置,方法同步

channell.write(buffers1,0,8);//指定缓冲区数组的offset下表开始,向后length个字节缓冲区,将每个缓冲区的remaining剩余字节序列写入此通道的当前位置

4、获取和设置通道的位置、大小


channell.position();

channell.position(2);

channell.size();//此通道关联文件的当前大小

5、long transferTo(position,count,WritableByteChannel dest)


1)position:文件中的位置,从此位置开始传输,必须为非负数。

2)count:要传输的最大字节数;必须为非负数。

3)dest:目标通道。

long transferTo(position,count,WritableByteChannel dest)方法的作用是将字节从此通道的文件传输到给定的可写入字节通道。

1、试图读取从此通道的文件中给定position处开始的count个字节,并将其写入目标通道的当前位置。

2、此方法的调用不一定传输所有请求的字节,是否传输取决于通道的性质和状态。

如果此通道的文件从给定的position处开始所包含的字节数小于count个字节,或者如果目标通道是非阻塞的并且其输出缓冲区中的自由空间少于count个字节,则所传输的字节数要小于请求的字节数。

3、此方法不修改此通道的位置。如果给定的位置大于该文件的当前大小,则不传输任何字节,否则从目标通道的position位置起始开始写入各字节,然后将该位置增加写入的字节数。

4、与从此通道读取并将内容写入目标通道的简单循环语句相比,此方法可能高效得多。很多操作系统可将字节直接从文件系统缓存传输到目标通道,而无须实际复制各字节。

6、long transferFrom(ReadableByteChannel src,position,count)


先自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以扫码领取!

img

结尾

查漏补缺:Java岗 千+道面试题Java基础+全家桶+容器+反射+异常等

这不止是一份面试清单,更是一种”被期望的责任“,因为有无数个待面试者,希望从这篇文章中,找出通往期望公司的”钥匙“,所以上面每道选题都是结合我自身的经验于千万个面试题中经过艰辛的两周,一个题一个题筛选出来再次对好答案和格式做出来的,面试的答案也是再三斟酌,深怕误人子弟是小,影响他人仕途才是大过,也希望您能把这篇文章分享给更多的朋友,让他帮助更多的人,帮助他人,快乐自己,最后,感谢您的阅读。

由于细节内容实在太多啦,在这里我花了两周的时间把这些答案整理成一份文档了,在这里只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
的两周,一个题一个题筛选出来再次对好答案和格式做出来的,面试的答案也是再三斟酌,深怕误人子弟是小,影响他人仕途才是大过,也希望您能把这篇文章分享给更多的朋友,让他帮助更多的人,帮助他人,快乐自己,最后,感谢您的阅读。

由于细节内容实在太多啦,在这里我花了两周的时间把这些答案整理成一份文档了,在这里只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
需要更多Java资料的小伙伴可以帮忙点赞+关注,点击传送门,即可免费领取!

  • 27
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值