您的位置:

java的io,java的io是面向流的,nio是面向块的

本文目录一览:

Java中的io流关闭问题

如下例子代码:

FileInputStream is = new FileInputStream(".");

BufferedInputStream bis = new BufferedInputStream(is);

bis.close();

从设计模式上看:

java.io.BufferedInputStream是java.io.InputStream的装饰类。

BufferedInputStream装饰一个 InputStream 使之具有缓冲功能,is要关闭只需要调用最终被装饰出的对象的 close()方法即可,因为它最终会调用真正数据源对象的 close()方法。

BufferedInputStream的close方法中对InputStream进行了关闭,下面是jdk中附带的源代码:

java.io.BufferedInputStream的api:

close

public void close()throws IOException 关闭此输入流并释放与该流关联的所有系统资源。

因此,可以只调用外层流的close方法关闭其装饰的内层流,验证例子:

public static void main(String[] args) throws Exception {

FileOutputStream fos = new FileOutputStream("d:\\a.txt");

OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");

BufferedWriter bw = new BufferedWriter(osw);

bw.write("java IO close test");

bw.close();

}

验证ok

看了mars老师的java视频,关于io的输入输出遇到问题了,请高手指点指点

《mars java开发视频》百度网盘资源免费下载

链接:

提取码:6eug

mars java开发视频|Java当中的异常(一).mp4|Java4Android_01_ppt.png|53.mp4|52_定义输入输出格式.mp4|51_综合练习(二).mp4|50_综合练习(一).mp4|49_开发工具之Eclipse(四).mp4|48_开发工具之Eclipse(三).mp4|47_开发工具之Eclipse(二).mp4|46_开发工具之Eclipse(一).mp4|45_hashCode()与toString().mp4|44_equals函数的作用.mp4|43_类集框架(三).mp4|42_类集框架(二).mp4  

Java中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数据读来。从微观角度来说,设置缓冲效率要高很多。尽管,不能从这个程序上看出来。 几万字的读写\就能看到差距

Java里的IO为什么输入是读数据,输出是写入数据。。怎么理解的?我怎么就理解不过来呢,刚好反了

可能一般人理解的输入输出是对文件本身而言的,比如会认为输入就是把数据写入到文件中,输出是把文件中的内容读出来。java IO中的输入输出目标对象是内存空间,比如输入流,是指从文件中或者其他地方读取数据输入到内存中,而输出流是指把内存中的内容输出到其他地方,是相对于内存而言的。