Java中的I/O

java 分享会

分享人:李宁虎

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

Java中I/O流是一种计算机用语。而I/O问题可以说是Web应用中所面临的主要问题之一,因为在这个海量数据时代,数据在网络中随处流动。这个流动都涉及到I/O问题,可以说大部分Web应用系统的瓶颈都是I/O瓶颈。

I/O问题是任何编程语言都无法回避的问题,可以说I/O问题是整个人机交互的核心问题,因为I/O是机器获取和交换信息的主要渠道。在这个数据爆炸的时代,I/O问题尤其突出。

2.知识剖析

IO流的三种分类方式

1.按流的方向分为:输入流和输出流

2.按流的数据单位不同分为:字节流和字符流

3.按流的功能不同分为:节点流和处理流

IO流的四大抽象类

字符流:Reader Write

字节流:InputStream 读 OutputStream 写

基于字节操作的I/O接口:InputStream 和 OutputStream

基于字符操作的I/O接口:Writer 和 Reader

基于磁盘操作的I/O接口:File

基于网络操作的I/O接口:Socket

FileReader类其实就是简单的包装一下FileInputStream,但是它继承InputStreamReader类,当调用read方法时其实调用的是StreamDecoder类的read方法,这个StreamDecoder正是完成字节到字符的解码的实现类。

3.常见问题

I/O传输过程中的阻塞问题,传输时间长,访问磁盘次数过多。

4.解决方案

通常提升磁盘I/O性能的方法有:

1:增加缓存,减少磁盘访问次数

2:优化磁盘的管理系统,设计最优的磁盘方式策略。这是在底层操作系统层面考虑的。

3:设计合理的磁盘存储数据块,以及访问这些数据块的策略。这是在应用层考虑的。可以给存放的数据设计索引,通过寻址输索引来加快和减少磁盘的访问量,还可以使用异步和非阻塞的方式加快磁盘的访问次数。

5.编码实战

让我们来看看这个例子的代码。

6.扩展思考

socket是什么,怎样与别的网络进行通信?

 一台计算机要和另一台计算机进行通讯,获取其上应用程序的数据,必须通过Socket建立连接,要知道对方的IP和端口号。建立一个Socket连接需要通过底层TCP/IP协议来建立TCP连接,而建立TCP连接必须通过底层IP协议根据给定的IP在网络中找到目标主机。目标计算机上可能跑着多个应用,所以我们必须要根据端口号来制定目标应用程序,这样就可以通过一个 Socket 实例唯一代表一个主机上的一个应用程序的通信链路了。

7.参考文献

链接:http://blog.csdn.net/sight_/article/details/8138802 作者:fantisGod 链接:https://www.cnblogs.com/zhuYears/archive/2013/04/10/2993292.html 作者:lance的心思

8.更多讨论

鸣谢

感谢观看,如有出错,恳请指正

BY : 北京分院 李宁虎