仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 435|回复: 8
打印 上一主题 下一主题

[学习教程] 发布一篇java io进修(三) 管道的简介,源码剖析和示例

[复制链接]
再现理想 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:00:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
因为能用到多少功能就用多少,不能用就不用!总的来说:要简单要性能好,可以不用框架。你说java复杂,就是因为你把java(j2ee)与这些框架混在了一起。
管道(PipedOutputStream和PipedInputStream)的简介,源码剖析和示例
本章,我们对java管道举行进修。
java管道先容
<p>在java中,PipedOutputStream和PipedInputStream分离是管道输入流和管道输出流。<p>它们的感化是让多线程能够经由过程管道举行线程间的通信。在利用管道通讯时,必需将PipedOutputStream和PipedInputStream配套利用。利用管道通讯时,大抵的流程是:我们在线程A中向PipedOutputStream中写进数据,这些数据会主动的发送到与PipedOutputStream对应的PipedInputStream中,进而存储在PipedInputStream的缓冲中;此时,线程B经由过程读取PipedInputStream中的数据。就能够完成,线程A和线程B的通讯。
PipedOutputStream和PipedInputStream源码剖析
<p>上面先容PipedOutputStream和PipedInputStream的源码。在浏览它们的源码之前,倡议先看看源码前面的示例。待了解管道的感化和用法以后,再看源码,大概更简单了解。<p>别的,因为在“javaio系列03之ByteArrayOutputStream的简介,源码剖析和示例(包含OutputStream)”中已对PipedOutputStream的父类OutputStream举行了先容,这里就不再先容OutputStream。在“javaio系列02之ByteArrayInputStream的简介,源码剖析和示例(包含InputStream)”中已对PipedInputStream的父类InputStream举行了先容,这里也不再先容InputStream。
<p>1.PipedOutputStream源码剖析(基于jdk1.7.40)
  1. packagejava.io;
  2. importjava.io.*;
  3. publicclassPipedOutputStreamextendsOutputStream{
  4. //与PipedOutputStream通讯的PipedInputStream对象
  5. privatePipedInputStreamsink;
  6. //机关函数,指定配对的PipedInputStream
  7. publicPipedOutputStream(PipedInputStreamsnk)throwsIOException{
  8. connect(snk);
  9. }
  10. //机关函数
  11. publicPipedOutputStream(){
  12. }
  13. //将“管道输入流”和“管道输出流”毗连。
  14. publicsynchronizedvoidconnect(PipedInputStreamsnk)throwsIOException{
  15. if(snk==null){
  16. thrownewNullPointerException();
  17. }elseif(sink!=null||snk.connected){
  18. thrownewIOException("Alreadyconnected");
  19. }
  20. //设置“管道输出流”
  21. sink=snk;
  22. //初始化“管道输出流”的读写地位
  23. //int是PipedInputStream中界说的,代表“管道输出流”的读写地位
  24. snk.in=-1;
  25. //初始化“管道输入流”的读写地位。
  26. //out是PipedInputStream中界说的,代表“管道输入流”的读写地位
  27. snk.out=0;
  28. //设置“管道输出流”和“管道输入流”为已毗连形态
  29. //connected是PipedInputStream中界说的,用于暗示“管道输出流与管道输入流”是不是已毗连
  30. snk.connected=true;
  31. }
  32. //将int范例b写进“管道输入流”中。
  33. //将b写进“管道输入流”以后,它会将b传输给“管道输出流”
  34. publicvoidwrite(intb)throwsIOException{
  35. if(sink==null){
  36. thrownewIOException("Pipenotconnected");
  37. }
  38. sink.receive(b);
  39. }
  40. //将字节数组b写进“管道输入流”中。
  41. //将数组b写进“管道输入流”以后,它会将其传输给“管道输出流”
  42. publicvoidwrite(byteb[],intoff,intlen)throwsIOException{
  43. if(sink==null){
  44. thrownewIOException("Pipenotconnected");
  45. }elseif(b==null){
  46. thrownewNullPointerException();
  47. }elseif((off<0)||(off>b.length)||(len<0)||
  48. ((off+len)>b.length)||((off+len)<0)){
  49. thrownewIndexOutOfBoundsException();
  50. }elseif(len==0){
  51. return;
  52. }
  53. //“管道输出流”吸收数据
  54. sink.receive(b,off,len);
  55. }
  56. //清空“管道输入流”。
  57. //这里会挪用“管道输出流”的notifyAll();
  58. //目标是让“管道输出流”保持对以后资本的占据,让别的的守候线程(守候读取管道输入流的线程)读取“管道输入流”的值。
  59. publicsynchronizedvoidflush()throwsIOException{
  60. if(sink!=null){
  61. synchronized(sink){
  62. sink.notifyAll();
  63. }
  64. }
  65. }
  66. //封闭“管道输入流”。
  67. //封闭以后,会挪用receivedLast()关照“管道输出流”它已封闭。
  68. publicvoidclose()throwsIOException{
  69. if(sink!=null){
  70. sink.receivedLast();
  71. }
  72. }
  73. }
复制代码
<p>
再说说缺点:首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。
飘灵儿 该用户已被删除
沙发
发表于 2015-1-20 12:34:05 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
活着的死人 该用户已被删除
板凳
发表于 2015-1-25 17:04:33 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
再现理想 该用户已被删除
地板
 楼主| 发表于 2015-2-3 11:54:35 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
海妖 该用户已被删除
5#
发表于 2015-2-8 20:39:20 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
蒙在股里 该用户已被删除
6#
发表于 2015-2-26 06:12:06 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
透明 该用户已被删除
7#
发表于 2015-3-8 12:19:06 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
不帅 该用户已被删除
8#
发表于 2015-3-15 22:52:29 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
冷月葬花魂 该用户已被删除
9#
发表于 2015-3-22 17:27:00 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 19:22

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表