JavaIO技术分析.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一:整个IO 流的概念:在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成,程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件。 要把一片二进制数据数据逐一输出到某个设备中,或者从某个设备中逐一读取一片二进制数据,不管输入输出设备是什么,我们要用统一的方式来完成这些操作,用一种抽象的方式进行描述,这个抽象描述方式起名为IO流,对应的抽象类OutputStream和InputStream,不同的实现类就代表不同的输入和输出设备,它们都是针对字节进行操作的。 在应用中,经常要完全是字符的一段文本输出去或读进来,用字节流可以吗?计算机中的一切最终都是二进制的字节形式存在。对于“中国”这些字符,首先要得到其对应的字节,然后将字节写入到输出流。读取时,首先读到的是字节,可是我们要把它显示为字符,我们需要将字节转换成字符。由于这样的需求很广泛,人家专门提供了字符流的包装类。 底层设备永远只接受字节数据,有时候要写字符串到底层设备,需要将字符串转成字节再进行写入。字符流是字节流的包装,字符流则是直接接受字符串,它内部将串转成字节,再写入底层设备,这为我们向IO设别写入或读取字符串提供了一点点方便。 字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好。对于我们常用的GBK中,英文是占用1个字节,中文是2个?。对于UTF-8,英文是1个,中文是3个?。对于Unicode,英文中文都是2个。 字符流和字节流的区别是:字节流在操作时本身不会用到缓冲区(内存),对文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件,字符流通过flush()方法强制性将缓存区内容写入到文件中,并清空缓存区,如下图所示: 二:IO 主要类API InputStream 和 OutputStream是两个abstract类,对于字节为导向的stream都扩展这两个基类。 InputStream int read():简单读方法返回一个int值,它是从流里读出的一个字节,如果遇到文件结束则返回-1。 int read(byte[]):将数据读入到字节数组中, 返回所读的字节数。 int read(byte[],int offset,int length):将数据读入的字节数组中,并返回读的字节数,offset是数组的偏移量,length是读取的长度。 void close():你完成流操作之后,就关闭这个流,如果你有一个流所组成的栈,使用过滤器流,就关闭栈顶部的流。这个关闭操作会关闭其余的流。 int available() : 这个方法报告立刻可以从流中读取的字节数,在这个调用之后的实际操作可能返回更多的字节数。 skip(long):这个方法丢弃了流中指定数目的字符。 boolean markSupported(),void mark(int) ,void reset()如果流支持“回放”操作,则这些方法可以用来完成这个操作。如果mark()和reset()方法可以在特定的流上操作,则markSupported()方法将返回true。Mark(int)方法用来指明应当标记流的当前点和分配一个足够大的缓冲区,它最少可以容纳参数所指定数量的字节。在随后的read()操作完成之后,调用reset()方法来返回你标记的输入点。 ByteArrayInputStream 把内存 中的一 个缓冲区作为InputStream使用 ByteArrayInputStream(byte[])创建一个新字节数组输入流,它从指定字节数组中读取数据(使用byte作为其缓冲区数组)。 ByteArrayInputStream(byte[],int,int)创建一个新字节数组输入流,它从指定字节数组中读取数据。 StringBufferInputStream 把一个String对象作为InputStream StringBufferInputStream(String) 指定串创建一个读取数据的输入流串(不推荐使用StringBufferInputStream方法,此类不能将字符正确的转换为字节,同JDK1.1版中的类似,从一个串创建一个流的最佳方法是采用StringReader类) FileInputStream 把一个文件作为InputStream,实现对文件的读取操作。 FileInputStream(File name

文档评论(0)

美洲行 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档