仓酷云

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

[学习教程] 了解下JAVA的java的输出流

[复制链接]
简单生活 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:36:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
还得说上一点,就java本质而言,是面相对象的,但是你有没有发现,java也不全是,比如说基本类型,int,那他就是整型而不是对象,转换类型是还得借助包装类。
固然,我们常常想做的一件事变是将格局化的输入打印到把持台,但那已在第5章创立的com.bruceeckel.tools中失掉了简化。
第1到第4部分演示了输出流的创立与利用(只管第4部分展现了将输入流作为一个测试工具的复杂使用)。

1.缓冲的输出文件
为翻开一个文件以便输出,必要利用一个FileInputStream,同时将一个String或File对象作为文件名利用。为进步速率,最好先对文件举行缓冲处置,从而取得用于一个BufferedInputStream的构建器的了局句柄。为了以格局化的情势读取输出数据,我们将谁人了局句柄赋给用于一个DataInputStream的构建器。DataInputStream是我们的终极(final)对象,并是我们举行读取操纵的接口。
在这个例子中,只用到了readLine()办法,但天经地义任何DataInputStream办法都能够接纳。一旦到达文件开端,readLine()就会前往一个null(空),以便中断并加入while轮回。
“Strings2”用于会萃完全的文件内容(包含必需增加的新行,由于readLine()往除那些行)。随后,在本程序的前面部分中利用s2。最初,我们挪用close(),用它封闭文件。从手艺上说,会在运转finalize()时挪用close()。并且我们但愿一旦程序加入,就产生这类情形(不管是不是举行渣滓搜集)。但是,Java1.0有一个十分凸起的毛病(Bug),形成这类情形不会产生。在Java1.1中,必需明白挪用System.runFinalizersOnExit(true),用它包管会为体系中的每一个对象挪用finalize()。但是,最平安的办法仍是为文件明白挪用close()。

2.从内存输出
这一部分接纳已包括了完全文件内容的Strings2,并用它创立一个StringBufferInputStream(字串缓冲输出流)——作为构建器的参数,请求利用一个String,而非一个StringBuffer)。随后,我们用read()顺次读取每一个字符,并将其发送至把持台。注重read()将下一个字节前往为int,以是必需将其外型为一个char,以便准确地打印。

3.格局化内存输出
StringBufferInputStream的接口是无限的,以是一般必要将其封装到一个DataInputStream内,从而加强它的才能。但是,若选择用readByte()每次读出一个字符,那末一切值都是无效的,以是不成再用前往值来侦测什么时候停止输出。相反,可用available()办法判别有几字符可用。上面这个例子展现了怎样从文件中一次读出一个字符:
  1. //:TestEOF.java
  2. //Testingfortheendoffilewhilereading
  3. //abyteatatime.
  4. importjava.io.*;
  5. publicclassTestEOF{
  6. publicstaticvoidmain(String[]args){
  7. try{
  8. DataInputStreamin=
  9. newDataInputStream(
  10. newBufferedInputStream(
  11. newFileInputStream("TestEof.java")));
  12. while(in.available()!=0)
  13. System.out.print((char)in.readByte());
  14. }catch(IOExceptione){
  15. System.err.println("IOException");
  16. }
  17. }
  18. }///:~
复制代码
注重取决于以后从甚么媒体读进,avaiable()的事情体例也是有所区分的。它在字面上意味着“能够不受堵塞读取的字节数目”。对一个文件来讲,它意味着全部文件。但对一个分歧品种的数据流来讲,它却大概有分歧的寄义。因而在利用时招考虑全面。
为了在如许的情形下侦测输出的停止,也能够经由过程捕捉一个背例来完成。但是,若真的用背例来把持数据流,却显得有些牛鼎烹鸡。

4.行的编号与文件输入
这个例子展现了怎样LineNumberInputStream来跟踪输出行的编号。在这里,不成复杂地将一切构建器都组合起来,由于必需坚持LineNumberInputStream的一个句柄(注重这并不是一种承继情况,以是不克不及复杂地将in4外型到一个LineNumberInputStream)。因而,li包容了指向LineNumberInputStream的句柄,然后在它的基本上创立一个DataInputStream,以便读进数据。
这个例子也展现了怎样将格局化数据写进一个文件。起首创立了一个FileOutputStream,用它统一个文件毗连。思索到效力方面的缘故原由,它天生了一个BufferedOutputStream。这几近一定是我们一样平常的做法,但却必需明白地如许做。随后为了举行格局化,它转换成一个PrintStream。用这类体例创立的数据文件可作为一个原始的文本文件读取。
标记DataInputStream什么时候停止的一个办法是readLine()。一旦没有更多的字串能够读取,它就会前往null。每一个行城市陪伴本人的行号打印到文件里。该行号可经由过程li查询。
可看到用于out1的、一个明白指定的close()。若程序筹办失落回头来,并再次读取不异的文件,这类做法就显得相称有效。但是,该程序直到停止也没有反省文件IODemo.txt。正如之前指出的那样,假如不为本人的一切输入文件挪用close(),便可能发明缓冲区不会失掉革新,形成它们不完全。
进而能拉拢大多数程序员用windows产品。并且从net网页编程网页编程AJAX可以跨平台这一点上,间接证明了我们的推断,至少证明了微软做过这方面的研究。所以如果哪一天突然听说了.net网页编程可以跨平台了,那么请不要吃惊,如果这一天真的到来,java就到了真正和.net网页编程决战的时刻。因为不到万不得以的时候微软是不会推出跨平台的.net网页编程的,如果跨平台的.net网页编程还不足以对抗java的话,那么微软还剩的手段就是开源了,呵呵。
变相怪杰 该用户已被删除
沙发
发表于 2015-1-21 10:45:04 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
飘灵儿 该用户已被删除
板凳
发表于 2015-1-30 15:52:09 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
活着的死人 该用户已被删除
地板
发表于 2015-2-5 14:53:24 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
再见西城 该用户已被删除
5#
发表于 2015-2-9 00:30:22 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
深爱那片海 该用户已被删除
6#
发表于 2015-2-22 11:41:44 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
谁可相欹 该用户已被删除
7#
发表于 2015-3-7 00:17:56 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-13 12:10:55 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
蒙在股里 该用户已被删除
9#
发表于 2015-3-13 23:07:29 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
爱飞 该用户已被删除
10#
发表于 2015-3-16 20:09:47 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
愤怒的大鸟 该用户已被删除
11#
发表于 2015-3-21 20:56:34 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
若天明 该用户已被删除
12#
发表于 2015-3-30 05:57:24 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
飘飘悠悠 该用户已被删除
13#
发表于 2015-4-15 22:19:21 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
admin 该用户已被删除
14#
发表于 2015-4-22 03:55:58 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
柔情似水 该用户已被删除
15#
发表于 2015-5-6 14:12:00 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
金色的骷髅 该用户已被删除
16#
发表于 2015-5-8 13:35:53 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
灵魂腐蚀 该用户已被删除
17#
发表于 2015-6-22 23:04:31 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
精灵巫婆 该用户已被删除
18#
发表于 2015-6-23 21:02:07 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
乐观 该用户已被删除
19#
发表于 2015-7-1 13:34:13 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
兰色精灵 该用户已被删除
20#
发表于 2015-7-5 01:49:54 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-3 13:13

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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