(018)java后台开发之语法输出流flush()方法
2018-01-11 17:24
267 查看
参考:
http://blog.csdn.net/lsx991947534/article/details/45065773
在java开发中,有时我们会进行流的操作,所以可能会经常遇到这样一段代码
有时我们只是大概看懂这些,却不知道其中的原理性东西,下面就来理解一下:
flush()这个函数是清空的意思,用于清空缓冲区的数据流,进行流的操作时,数据先被读到内存中,然后再用数据写到文件中,那么当你数据读完时,我们如果这时调用close()方法关闭读写流,这时就可能造成数据丢失,为什么呢,因为,读入数据完成时不代表写入数据完成,一部分数据可能会留在缓存区中,为了理解这个问题,我们举一个例子:
比如,在农村,几乎每家都有抽水机,抽水机的作用是什么呢,就是把水井里的水抽到水缸中,这时我们就会用水管连接抽水机和水缸(水管就好比是缓冲区),当我们想把水井中的水都抽到水缸中时,我们就让抽水机工作抽水,如果我们发现水井里的水刚好抽完时,我们就会关掉抽水机的开关停止抽水,那么这时,管道里就会遗留一部分水,抽水就是读数据,水缸进水就是写数据,水管充当缓存区的角色,不知道这样是不是具象化了呢
那么这样一来我们如果中途调用close()方法,输出区也还是有数据的,就像水缸里有水,只是在缓冲区遗留了一部分,这时如果我们先调用flush()方法,就会强制把数据输出,缓存区就清空了,最后再关闭读写流调用close()就完成了。
这是JDK中PrintWriter类提供的flush方法,如上面注释所说,ensureOpen()方法是用于确保该流没有被关闭,如果没有关闭则执行flush方法中的out.flush();
这样列举是不是对PrintWriter中的方法有有所理解了呢。那么问题又来了,我们平时用的flush()和这里的flush()是不是一样的呢?这个就先思考一下
:close方法中默认是进行flush操作的。
http://blog.csdn.net/lsx991947534/article/details/45065773
在java开发中,有时我们会进行流的操作,所以可能会经常遇到这样一段代码
out.flush(); out.close();
有时我们只是大概看懂这些,却不知道其中的原理性东西,下面就来理解一下:
flush()这个函数是清空的意思,用于清空缓冲区的数据流,进行流的操作时,数据先被读到内存中,然后再用数据写到文件中,那么当你数据读完时,我们如果这时调用close()方法关闭读写流,这时就可能造成数据丢失,为什么呢,因为,读入数据完成时不代表写入数据完成,一部分数据可能会留在缓存区中,为了理解这个问题,我们举一个例子:
比如,在农村,几乎每家都有抽水机,抽水机的作用是什么呢,就是把水井里的水抽到水缸中,这时我们就会用水管连接抽水机和水缸(水管就好比是缓冲区),当我们想把水井中的水都抽到水缸中时,我们就让抽水机工作抽水,如果我们发现水井里的水刚好抽完时,我们就会关掉抽水机的开关停止抽水,那么这时,管道里就会遗留一部分水,抽水就是读数据,水缸进水就是写数据,水管充当缓存区的角色,不知道这样是不是具象化了呢
那么这样一来我们如果中途调用close()方法,输出区也还是有数据的,就像水缸里有水,只是在缓冲区遗留了一部分,这时如果我们先调用flush()方法,就会强制把数据输出,缓存区就清空了,最后再关闭读写流调用close()就完成了。
public class PrintWriter extends Writer { protected Writer out; /** Checks to make sure that the stream has not been closed */ private void ensureOpen() throws IOException { if (out == null) throw new IOException("Stream closed"); } /** * Flushes the stream. * @see #checkError() */ public void flush() { try { synchronized (lock) { ensureOpen(); out.flush(); } } catch (IOException x) { trouble = true; } } }
这是JDK中PrintWriter类提供的flush方法,如上面注释所说,ensureOpen()方法是用于确保该流没有被关闭,如果没有关闭则执行flush方法中的out.flush();
这样列举是不是对PrintWriter中的方法有有所理解了呢。那么问题又来了,我们平时用的flush()和这里的flush()是不是一样的呢?这个就先思考一下
:close方法中默认是进行flush操作的。
相关文章推荐
- Sublime Text 3搭建Java开发环境及输出编码问题解决方法
- 关于java中输出流flush()方法
- 关于java中输出流flush()方法
- android 开发是 页面JS调用后台java方法
- Java开发自己的IDE(已经有界面、编译、运行、后台工程管理功能)
- Java将变量中的数据用“二进制”格式输出的方法
- int 和 String 互相转换的多种方法-Java基础-Java-编程开发
- java中删除数据库中重复数据的几个方法-Java基础-Java-编程开发
- Java Servlet 编程及应用之Cookie的使用方法-Java基础-Java-编程开发
- 巧用重写toString的方法,输出格式的问题留给java帮我解决吧~
- JSF的中文化与国际化的简便方法-Java基础-Java-编程开发
- Java基础-设计一个Java类所需的方法-Java基础-Java-编程开发
- linux下通过eclipse开发用java调用c程序的方法
- 快速开发时可以使用的Java文件工具方法
- 基于Ajax和JSON从javascript中调用后台java方法的JsonGateway
- 开发笔记:创建Java线程的两种方法
- java语法,方法
- JAVA开发:十个JAVA代码查错方法
- .Net开发新的知识积累(Enum, protected,前台用后台和PageBase中定义的公用方法,不用ItemDataBound)
- 一针见血谈谈面向对象的思维方法-Java基础-Java-编程开发