[转帖] Java流是什么呢?给大家展示下Java!_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2460 | 回复: 0   主题: [转帖] Java流是什么呢?给大家展示下Java!        下一篇 
    本主题由 koei 于 2014-5-2 16:22:05 移动
lengyuLee
注册用户
等级:少校
经验:1118
发帖:83
精华:5
注册:2013-3-7
状态:离线
发送短消息息给lengyuLee 加好友    发送短消息息给lengyuLee 发消息
发表于: IP:您无权察看 2013-3-13 15:10:15 | [全部帖] [楼主帖] 楼主

流是什么?
 流是个抽象的概念,当程序需要从某个数据源读入数据的时候,就会开启一个数据流,数据源可以是文件、内存或网络等等。相反地,需要写出数据到某个数据源目的地的时候,也会开启一个数据流,这个数据源目的地也可以是文件、内存或网络等等。这个时候,你就可以想象数据好像在其中流动一样,如下图:

北京联动北方科技有限公司

北京联动北方科技有限公司

你可以将流想象成一个“水流管道”,水流就在这管道中形成了,自然就出现了方向的概念,水可以流进也可以流出。当水从一处流进管道的时候,就相当于从数据源读入数据至流中,当水从管道流到某处的时候,就相当于从流中写出数据到某个数据源目的地。
 刚刚说到流有方向的概念,在Java中将读入数据的流叫做输入流,将写出数据的流叫做输出流。
流的分类:
从三个角度对流进行分类:

1、

根据数据单位不同:字符流和字节流。

2、

根据流的方向不同:输入流和输出流。

3、

根据流的功能不同:节点流和过滤流。
前面两种分类方式很好理解:

北京联动北方科技有限公司

 第三种分类方式理解:节点流可以从一个特定的数据源(节点)读写数据;而过滤流指的是连接在已经存在的流(节点流或过滤流)之上,通过对数据的简单处理为程序提供更强大的读写功能。
Java中的流分别由四个抽象类:InputStream、OutputStream、Reader、Writer派生而成。

北京联动北方科技有限公司

北京联动北方科技有限公司

北京联动北方科技有限公司

读写字节:
InputStream类中有一个抽象方法:

abstract int read() throws IOException


从流中读入一个字节,并返回这个字节的byte值,假如流已经读取到末尾则返回-1。在设计具体的输入流时,必须覆盖这个方法以提供适用的功能,例如:在FileInputStream类中,这个方法将从某个文件中读入一个字节,而System.int却是从键盘读入信息的。
 InputStream类中还有若干个非抽象的方法,它们可以读入一个数组,如:int read(byte [] b) throws IOException,或者指定从某个位置开始读和读入数组的长度,如:int read(byte [] b, int off, int len) throws IOException。它们都需要调用抽象的read方法。
 与此类似,OutputStream类定义了下面的抽象方法:abstract void write(int b),它可以向某个输出位置写出一个字节。
read和write方法在执行时都将阻塞,直至字节确实被读入或写出。这就意味着如果流不能被立即访问(通常是因为网络连接忙),那么当前的线程将被阻塞。
available方法使我们可以去检查当前可用于读入的字节数量,这意味着像下面这样的代码片段不可能被阻塞:

int bytesAvailable = in.available();
if(bytesAvailable >0) {
      byte [] data = new byte[bytesAvailable];
      in.read(data);
}


当你完成对流的读写时,应该通过调用close方法来关闭它,这个方法会释放掉十分有限的操作系统资源,如果一个应用程序打开了过多的流而没有关闭它们,那么系统资源将会被耗尽。

该贴由koei转至本版2014-5-2 16:22:05




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论