问题1:InputStream、OutputStream 中的close()方法,在关闭所有资源时,会自动保存吗?有个朋友说会自动保存,但是JDK上只说了关闭资源,没说会保存,所以拿出来问问大家。问题2:既然内存提供了缓冲区,我们为什么还要自己创造另一个缓冲区呢?内存提供的缓冲区是固定大小的,还是动态分配的?如果我们设置的BufferedInputStream 缓冲区大小比内存自动提供的缓冲区小怎么办??
调试欢乐多
楼主【llm0528】截止到2008-07-03 17:09:37的历史汇总数据(不包括此帖):
发帖的总数量:40 发帖的总分数:800
结贴的总数量:40 结贴的总分数:800
无满意结贴数:0 无满意结贴分:0
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:0.00 % 无满意结分率:0.00 %
敬礼!
这些进程中的一个.如果要用内存的缓冲区,是需要操作系统来完成换入换出的
回答1:自动保存这个说法第一次听到,你可能是把输出流的关闭当成文件的关闭了(一般文件改动后没保存就关闭会出现一个对话框提示保存)。注意,这里的输出流是一个非常抽象的概念,输出流的一端是你的 Java 应用程序,另一端是数据的目的地,这个目的地可能是一个文件,可能是网络上的另一台计算机,可能是任何需要接收你 Java 应用程序生成并流淌出的数据的东西。关闭输出流只是告诉管理这个目的地的系统:“这个资源我用完了,你可以把它交给别人使用了”。至于尚在缓冲区中的数据,如果你不调用 flush() 方法,那这些数据将不会自动发送到目的地,当然可能就此丢失了。
回答2:你说的“内存缓冲区”指 BufferedInputStream 吗?
2.内存提供的缓存,是为了提高内存到CPU的速度。我们为什么还要自己创造另一个缓冲区呢,是提高硬盘到内存的速度
你说的那个缓冲区确实可能存在,但归操作系统自动管理,我们通过 Java 无权控制,所以不用过多考虑,管理好 Java 自己的缓冲区就行了。像这样的缓冲区太多了,例如文件中数据从磁盘到 CPU 上处理要经历:硬盘磁碟 -> 硬盘缓存(硬盘控制电路上的内存颗粒)-> 内存(俗称内存条)-> CPU L2(CPU 2级缓存)-> CPU L1(CPU 1级缓存)-> CPU 寄存器 -> ... 深究下去不学硬件没个完。
output应该会保存