javaIO中stream和channel的本质区别是什么

小编 615

javaIO中stream和channel的本质区别是:1.基本概念不同;2.数据传输的特性不同;3.读取外部数据的方法不同。基本概念不同主要在于,stream是阻塞模式(BIO),只能在阻塞编程中使用;而channel是通道模式(NIO),可以在异步非阻塞变成中使用。

1.基本概念不同

stream是BIO,也就是阻塞模式,分IN和OUT两个,但无论是IN还是OUT,在进行消息处理是是阻塞当前线程的,也就是需要等待对方的数据到达;且stream只能在阻塞编程中使用。

channel是NIO,可以看作其包含了IN OUT是一个通道的概念。channel的实现有很多,针对本地文件的,针对网络的,针对内存的,不同的其表现并不完全相同。channel可以在异步非阻塞变成中使用,在读取数据的过程中会产生相应的时事件。

2.数据传输的特性不同

stream的数据传输是单向的,即一个stream不可能同时读同时写,这样也从java规范中不允许的,因为inputstream和outputstream都是抽象类,一个类不可能同时继承两个抽象类。而channel是双向数据传输,既可以用来进行读操作,又可以用来进行写操作。

3.读取数据的方式不同

应用程序通过stream读取外部数据(比如文件),首先获取这个文件对应的stream,然后直接从stream中获取对应的数据。

而应用程序通过channel读取外部数据(比如文件),首先得获取这个数据对应的channel,然后通过channel将数据写入的buffer当中,不管这个buffer是堆内缓冲区还是直接缓冲区,应用程序操作的都是这个buffer中的数据。

延伸阅读

javaIO是什么

javaIO是Java的输入输出系统,IO是Input(输入)和Output(输出)的首字母缩写。I(输入Input)指向Java程序中输入数据,即Java程序从外部获取数据;O(输出Output)指的是Java程序向外部输出数据,即Java程序向外部发送数据。

在javaIO中,流是一个核心的概念。流从概念上来说是一个连续的数据流。你既可以从流中读取数据,也可以往流中写数据。流与数据源或者数据流向的媒介相关联。在Java IO中流既可以是字节流(以字节为单位进行读写),也可以是字符流(以字符为单位进行读写)。

Java的IO包主要关注的是从原始数据源的读取以及输出原始数据到目标媒介。而最典型的数据源和目标媒介是:文件、管道、网络连接、内存缓存,以及System.in(Java标准输入)、System.out(Java标准输出)、System.error(错误输出)。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部