IO流简单介绍

大家好,我是修真院武汉分院15期java学员,今天我给大家分享-------IO流简单介绍

 

1.背景介绍

2.知识剖析

3.常见问题

4.编码实战

5.扩展思考

6.参考文献

7.更多讨论

 

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

 

输入流:InputStream 它的作用是用来表示那些从不同数据源产生输入的类,这些数据源包括:

1)字节数组 
2)String对象
3)文件对象
4)“管道”,工作方式与实际生活中的管道类似,即从一端输入,从另一端输出
5)由其它种类的流组成的序列,以便我们可以将它们收集合并到一个流内
6)其它数据源,如Internet连接等

每种数据源都有对应的InputStream子类,还有一种单独的FileInputStream也是属于一种InputStream

输出流:OutputStream 它决定输出所要去的目标:

1)字节数组
2)文件对象
3)管道

输出目标也有对应的子类

Reader和Writer(字符输入和输出流)

java 1.1对基本的IO流类库进行了重大的修改,当中最大的改动就是出现了Reader和Writer类。这两个类不是用来替代InputStream和OutputStream的,而是提供Unicode和面向字符的IO功能,也就是现在我们说的字符流。它的继承层次结构主要是为了国际化,而且在此之前的io流不能很好的处理16位的Unicode字符,在我们需要字符和字节结合起来使用的时候很不方便,它们也可以通过适配器(InputStreamReader/OutputStreamWriter)和InputStream/OutputStream互相转换。
而Java中的字符是Unicode是双字节的,InputStream是用来处理字节,并不适合处理字符串文本,所以在处理字符上应该尽量使用它们。

输出流:OutputStream 它决定输出所要去的目标:

1)字节数组
2)文件对象
3)管道

输出目标也有对应的子类

Reader和Writer(字符输入和输出流)

java 1.1对基本的IO流类库进行了重大的修改,当中最大的改动就是出现了Reader和Writer类。这两个类不是用来替代InputStream和OutputStream的,而是提供Unicode和面向字符的IO功能,也就是现在我们说的字符流。它的继承层次结构主要是为了国际化,而且在此之前的io流不能很好的处理16位的Unicode字符,在我们需要字符和字节结合起来使用的时候很不方便,它们也可以通过适配器(InputStreamReader/OutputStreamWriter)和InputStream/OutputStream互相转换。
而Java中的字符是Unicode是双字节的,InputStream是用来处理字节,并不适合处理字符串文本,所以在处理字符上应该尽量使用它们。

缓存流 

BufferedInputStream和BufferedOutputStream
BufferedReader和BufferedWriter
缓存是IO的一种性能优化。缓存流为IO流增加了内存缓存区,大大增加了流的执行效率
缓存流本身不具IO功能,只是在别的流上加上缓冲提高效率,像是为别的流装上一种包装。在对文件或其他目标频繁读写或操作的时候可能效率低、效能差,这时候使用缓冲流可以更高效的读写信息。因为缓冲流先将数据缓存起来,然后一起写入或读取出来。所以说,缓冲流还是很重要的,在IO操作时记得加上缓冲流提升性能。

 

3.常见问题

字符流和字节流的区别

字节流操作的基本单元为字节(8bit),可以通过字节操作所有数据;字符流操作的基本单元为Unicode码元,只能处理字符类 数据。
字节流默认不使用缓冲区;字符流使用缓冲区。
字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元;字符流通常处理文本数据,它支持写入及读取Unicode码元。

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

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

 

4.编码实战

 

5.扩展思考

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

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

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

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

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

6.参考文献

JAVA编程思想

JAVA从入门到精通(第四版)

百度:JAVA IO流

7.更多讨论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值