深入分析 Java 输入输出 工作机制.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
页码,1/ 14 深入分析 Java I/O 的工作机制 令波, Java 工程师, 淘宝网 简介:I/O 问题可以说是当今互联网 Web 应用中所面临的主要问题之一,因为当前在这个海量数据时代, 数据在网络中随处流动。这个流动的过程中都涉及到 I/O 问题,可以说大部分 Web 应用系统的瓶颈都是 I/O 瓶颈。本文的目的正是分析 I/O 的内在工作机制,你将了解到:Java 的 I/O 类库的基本架构;磁盘 I/O 工作机制;网络 I/O 的工作机制;其中以网络 I/O 为重点介绍 Java Socket 的工作方式;你还将了解到 NIO 的工作方式,还有同步和异步以及阻塞与非阻塞的区别,最后我们将介绍一些常用的关于 I/O 的优化 技巧。 本文的标签: i/o 标记本文! 发布日期: 2011 年 10 月 31 日 级别: 中级 Java 的 I/O 类库的基本架构 I/O 问题是任何编程语言都无法回避的问题,可以说 I/O 问题是整个人机交互的核心问题,因为 I/O 是机 器获取和交换信息的主要渠道。在当今这个数据大爆炸时代,I/O 问题尤其突出,很容易成为一个性能瓶 颈。正因如此,所以 Java 在 I/O 上也一直在做持续的优化,如从 1.4 开始引入了 NIO,提升了 I/O 的性 能。关于 NIO 我们将在后面详细介绍。 Java 的 I/O 操作类在包 j ava.io 下,大概有将近 80 个类,但是这些类大概可以分成四组,分别是: 1. 基于字节操作的 I/O 接口:InputStream 和 OutputStream 2. 基于字符操作的 I/O 接口:Writer 和 Reader 3. 基于磁盘操作的 I/O 接口:File 4. 基于网络操作的 I/O 接口:Socket 前两组主要是根据传输数据的数据格式,后两组主要是根据传输数据的方式,虽然 Socket 类并 在 j ava.io 包下,但是我仍然把它们划分在一起,因为我个人认为 I/O 的核心问题要么是数据格式影响 I/O 操 作,要么是传输方式影响 I/O 操作,也就是将什么样的数据写到什么地方的问题,I/O 只是人与机器或者 机器与机器交互的手段,除了在它们能够完成这个交互功能外,我们关注的就是如何提高它的运行效率 了,而数据格式和传输方式是影响效率最关键的因素了。我们后面的分析也是基于这两个因素来展开的。 基于字节的 I/O 操作接口 基于字节的 I/O 操作接口输入和输出分别是:InputStream 和 OutputStream,InputStream 输入流的类继承 层次如下图所示: 图 1. InputStream 相关类层次结构(查看大图) 页码,2/ 14 输入流根据数据类型和操作方式又被划分成若干个子类,每个子类分别处理 同操作类型,OutputStream 输出流的类层次结构也是类似,如下图所示: 图 2. OutputStream 相关类层次结构(查看大图) 这里就 详细解释每个子类如何使用了,如果 清楚的话可以参考一下 JDK 的 API 说明文档,这里只想 说明两点,一个是操作数据的方式是可以组合使用的,如这样组合使用 OutputStream out = new BufferedOutputStream(new ObjectOutputStream(new FileOutputStream (fileName)); 还有一点是流最终写到什么地方必须要指定,要么是写到磁盘要么是写到网络中,其实从上面的类图中我 们发现,写网络实际上也是写文件,只 过写网络还有一步需要处理就是底层操作系统再将数据传送到其 它地方而 是本地磁盘。关于网络 I/O 和磁盘 I/O 我们将在后面详细介绍。 基于字符的 I/O 操作接口 不管是磁盘还是网络传输,最小的存储单元都是字节,而 是字符,所以 I/O 操作的都是字节而 是字 符,但是为啥有操作字符的 I/O 接口呢?这是因为我们的程序中通常操作的数据都是以字符形式,为了操 作方便当然要提供一个直接写字符的 I/O 接口,如此而已。我们 道字符到字节必须要经过编码转换,而 这个编码又非常耗时,而且还会经常出现乱码问题,所以 I/O 的编码问题经常是让人头疼的问题。关于 I/O 编码问题请

文档评论(0)

kehan123 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档