1、缓冲流为什么会提高IO流读写的效率?
调用I\O操作的时候,实际上还是一个一个的读或者写,关键就在,CPU只有一个,不论是几个核心。CPU在系统调用时,会不会还要参与主要操作?参与多次就会花更多的时间。
系统调用时,若不用缓冲,CPU会酌情考虑使用 中断。此时CPU是主动地,每个周期中都要花去一部分去询问I\O设备是否读完数据,这段时间CPU不能做任何其他的事情(至少负责执行这段模块的核不能)。所以,调用一次读了一个字,通报一次,CPU腾出时间处理一次。
而设置缓冲,CPU通常会使用 DMA 方式去执行 I\O 操作。CPU 将这个工作交给DMA控制器来做,自己腾出时间做其他的事,当DMA完成工作时,DMA会主动告诉CPU“操作完成”。这时,CPU接管后续工作。在此,CPU 是被动的。DMA是专门 做 I\O 与 内存 数据交换的,不仅自身效率高,也节约了CPU时间,CPU在DMA开始和结束时做了一些设置罢了。
所以,调用一次,不必通报CPU,等缓冲区满了,DMA 会对C PU 说 “嘿,伙计!快过来看看,把他们都搬走吧”。
综上,设置缓冲,就建立了数据块,使得DMA执行更方便,CPU也有空闲,而不是呆呆地候着I\O数据读来。从微观角度来说,设置缓冲效率要高很多。尽管,不能从这个程序上看出来。
2、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的?
.当我们的解码和编码的用的编码表不同的时候会发生乱码,我们用转换流来进行编码转换
3、序列化流中的serialVersionUID的作用
解决在序列化和反序列化过程中因为更改类中的内容导致的.class不同
4、请根据自己的语言表述IO流的体系
InputStream类:是所有字节输入流的父类前端css,是一个抽象类;
StringBufferInputStream类:是一种基本的介质流,网页重构报价用于从StringBuffer(字符数组)中读取数据;
ByteArrayInputStream类:是一种基本的介质流div+css前端,用于从Byte字节数组中度数数据;
FileInputStream类:最基本的文件输入流,div+css前端用于从文件中读取数据;
PipeInputStream类:该类在流中引入管道的概念css3切图,用于从其他线程共用的管道中读取数据;
SequenceInputStream 类:将2个或者多个InputStream 对象转变为一个InputStream.
注意:ObjectInputStream、所有FilterInputStream的子类都是装饰流.
DataInputStream 类:一般和DataOutputStream配对使用,手机div+css提供了大量的读取基本数据类型的方法.
BufferedInputStream 类:使用该对象阻止每次读取一个字节都会频繁操作IO.将字节读取一个缓存区css样式制作,从缓存区读取.
LineNumberInputStream 类:跟踪输入流中的行号.可以调用getLineNumber( )和 setLineNumber(int)方法得到和设置行号.
PushbackInputStream 类:可以在读取最后一个byte 后将其放回到缓存中. |