java 包装流_java – 通道是否包装IO流?

我想知道清除概念差异的区别,因为我已经看到SocketChannel,FileChannel等类.与Socket和File I / O Streams相比

据我所知,I / O Streams必须按顺序访问,即它们是可以读写的字节序列.您还可以使用缓冲流来提高I / O的效率.

那么,与Streams相比,“频道”是一个全新的概念还是仅仅是Streams的包装器?

是的,如果我们说“Stream是一个字节序列”那么如果两者都不同,那么这个意义上的频道是什么?

解决方法:

根据特定类型,通道仍然表示可以顺序读取或写入的字节序列.您可以通过Channels类中的工厂方法在这些API之间进行转换,这表明存在关系.

但是NIO API解决了某些设计问题,这些问题无法通过重构旧的流类(以兼容的方式)来解决.例如.基本类型现在是接口,允许某些通道同时实现多种类型,如ReadableByteChannel和WritableByteChannel.此外,没有读取单个字节的方法,这是摆脱“你可以使用BufferedStream来提高效率”神话的好方法.如果缓冲区大小不足导致I / O性能瓶颈,则首先提供一个更大的缓冲区,而不是将流或通道包装到另一个缓冲区中,从而强制它在缓冲区之间复制所有数据.因此,没有BufferedChannel.

除了顺序访问之外,像FileChannel这样的某些实现提供了允许随机访问底层资源的其他方法.这样,您可以使用统一的接口,而不是处理完全不同的API,例如RandomAccessFile / InputStream / OutputStream关系.

此外,在引入NIO时添加了许多以前缺少的I / O功能.其中一些可以在没有问题的情况下在旧类上实现,但设计者显然倾向于为所有这些使用新API,从一开始就可以在设计中考虑这些功能.

但一般来说,如上所述,与流相比,渠道并不是一个全新的概念.

标签:java,io,stream,nio,channel

来源: https://codeday.me/bug/20190623/1266121.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值