仓酷云

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

[学习教程] 来看Java剖析收集数据流的三种特别办法

[复制链接]
变相怪杰 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:21:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
你对java乐观有点盲目。java的关键就是在服务器上表现优异,而且它提供了整个开发所需要的工具。应该是说,看哪天。net网页编程有没有机会赶上java。
Java作为最开放的言语,已愈来愈遭到收集程序员的喜爱。但这一喜爱族有着一样的履历——已经都为收集上通讯的Java数据格局而烦脑。
笔者也不破例,已经为此而查阅了良多文档,经由重复测试才得以办理,现在笔者已在所处置的良多电子政务项目中顺遂的使用。明天笔者写此文,先容用Java剖析收集数据的三种特别办法,但愿对正在追求这方面成绩谜底的读者有所匡助。
UTF8转换成GB2312当我们在基于HTTP协定的JSP或Servlet的使用中猎取数据或发送哀求时,JVM会把保送的数据编码成UTF8格局。假如我们间接从HTTP流中提取中文数据,提取的了局为“????”(大概更多问号),为转换成我们可以了解的中笔墨符,我们必要把UTF8转换成GB2312,借助ISO-8859-1尺度编码可以容易的完成,上面的代码完成了这一功效:
byte[]b;
Stringutf8_value;
utf8_value=request.getParameter("NAME");//从HTTP流中取"NAME"的UTF8数据
b=utf8_value.getBytes("8859_1");//两头用ISO-8859-1过渡
Stringname=newString(b,"GB2312");//转换成GB2312字符
在晓得流长度的情形下将输出流转换成字节数组Java中的输出流笼统类InputStream有intread(byte[]b,intoff,intlen)办法,参数中byte[]b是用来寄存从InputStream中读取的数据,intoff指定命组b的偏移地点,也就是数组b的肇端下标,intlen指定必要读取的长度,办法前往实践读取的字节数。刚学Java的伴侣大概要说:先界说一个与流长度等长的字节数组,挪用read办法,指定肇端下标为0,指定读取长度与数组长度等长,不是一会儿能够读出来了吗?说的没错,笔者已经也试着如许读取数据,但厥后发明在读取收集数据时很不平安,我们想一想在收集上猎取数据大概并没那末流利,数据流的传送大概会断断续续,以是其实不能包管一次就可以读取全体数据,出格是在读取年夜容量数据时更是云云,以是我们必需在读取数据时检测实践读到的长度,假如没有读完已知长度的数据就应当再次读取,以此轮回检测,直到实践读取的长度累加与已知的长度相称,上面的代码完成了这一功效:
ServletInputStreaminStream=request.getInputStream();//取HTTP哀求流
intsize=request.getContentLength();//取HTTP哀求流长度
byte[]buffer=newbyte[size];//用于缓存每次读取的数据
byte[]in_b=newbyte[size];//用于寄存了局的数组
intcount=0;
intrbyte=0;
while(count<size){//轮回读取
rbyte=inStream.read(buffer);//每次实践读取长度存于rbyte中
for(inti=0;i<rbyte;i++){
in_b[count+i]=buffer[i];
}
count+=rbyte;
}
在不晓得流长度的情形下将输出流转换成字节数组后面先容了已知流长度的情形下的转换办法,那末当我们不晓得流有多长时,也就是说不克不及断定转换后的字节数组有多年夜时,该怎样处置呢?笔者检察了JDK文档以后发明ByteArrayOutputStream有一个byte[]toByteArray()办法,该办法会主动创立一个字节数组,然后前往。因而就奇妙的用ByteArrayOutputStream来作两头过渡完成转换,别的处置跟下面所先容已知长度的情形差未几。假定必要被转换的流已放在inStream里了,我们能够用以下的代码完成这一功效:
ByteArrayOutputStreamswapStream=newByteArrayOutputStream();
byte[]buff=newbyte[100];//buff用于寄存轮回读取的一时数据
intrc=0;
while((rc=inStream.read(buff,0,100))>0){
swapStream.write(buff,0,rc);
}
byte[]in_b=swapStream.toByteArray();//in_b为转换以后的了局
下面先容了三种对照有用的Java数据转换,有乐趣的伴侣可经由过程nbDeveloper@hotmail.com与笔者获得接洽,进一步交换别的有关XML使用、程序计划形式、J2EE开辟和UML等常识。

但是我同意你的观点,对于大型项目来说,应该是采用框架的一部分,根据功能的不同而改进,欢迎你能再提出些宝贵意见,我会多多学习的。说到jbuilder,我可能是个人感觉,用的时候确实没有vs爽,我最喜欢的IDE是net网页编程beans,谢谢。
山那边是海 该用户已被删除
沙发
发表于 2015-1-20 20:52:41 | 只看该作者
是一种突破用户端机器环境和CPU
小妖女 该用户已被删除
板凳
发表于 2015-1-25 19:46:15 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
不帅 该用户已被删除
地板
发表于 2015-1-26 07:37:08 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
飘飘悠悠 该用户已被删除
5#
发表于 2015-2-4 13:19:13 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
海妖 该用户已被删除
6#
发表于 2015-2-8 20:28:42 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
若相依 该用户已被删除
7#
发表于 2015-2-12 00:04:11 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
莫相离 该用户已被删除
8#
发表于 2015-3-7 10:40:46 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
飘灵儿 该用户已被删除
9#
发表于 2015-3-15 00:03:32 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
活着的死人 该用户已被删除
10#
发表于 2015-3-21 15:04:12 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-28 13:15

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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