前言:
大家在使用Java IO流中OutputStream、PrintWriter ……时,会经常用到它的flush()方法。
一.为什么要flush:
与在网络硬件中缓存一样,流还可以在软件中得到缓存,即直接在Java代码中缓存。这可以通过BufferedOutputStream或BufferedWriter 链接到底层流上来实现。因此,在写
完数据时,flush就显得尤为重要。
例如:
上图中WEB服务器通过输出流向客户端响应了一个300字节的信息,但是,这时的输出流有一个1024字节的缓冲区。所以,输出流就一直等着WEB服务器继续向客户端响应信 息,当WEB服务器的响应信息把输出流中的缓冲区填满时,这时,输出流才向WEB客户端响应消息。
为了解决这种尴尬的局面,flush()方法出现了。flush()方法可以强迫输出流(或缓冲的流)发送数据,即使此时缓冲区还没有填满,以此来打破这种死锁的状态。
当我们使用输出流发送数据时,当数据不能填满输出流的缓冲区时,这时,数据就会被存储在输出流的缓冲区中。如果,我们这个时候调用关闭(close)输出流,存储在输出流的缓冲区中的数据就会丢失。所以说,关闭(close)输出流时,应先刷新(flush)换冲的输出流,话句话说就是:“迫使所有缓冲的输出数据被写出到底层输出流中”。
二.解读flush()源码:
下面以BufferedOutputStream类为例:
publicclass BufferedOutputStream extends FilterOutputStream { publicsynchronizedvoid flush() throws IOException { flushBuffer(); out.flush(); } privatevoid flushBuffer() throws IOException { if(count > 0) { out.write(buf, 0, count); count = 0; } } }
看到这里大家明白了吧,其实flush()也是通过out.write()将数据写入底层输出流的。
相关推荐
IO流中关闭和刷新的区别 因为内置缓冲区的原因,如果不关闭输出流,无法写出字符到文件中,但是关闭的流对象,是无法继续写出数据的,如果我们既想写出数据,又想继续使用流,就需要使用flush方法了 flush : 刷新...
//每一次写入流 for(int i=0;i;i++){ if(i==(each-1)&&writeStringToBytes.length%tempLength!=0){ System.arraycopy(writeStringToBytes, i*tempLength, temp, 0, writeStringToBytes.length%...
本篇文章是小编总结的关于Java IO的flush的相关知识点内容,有需要的朋友可以跟着学习下。
java控制串口发送数据时在windows环境下正常,linux环境下报错C [librxtxSerial.so+0x75da] Java_gnu_io_RXTXPort_nativeDrain+0xea,经多方查询验证为rxtx包版本问题,用本文档中的版本可以正常运行
主要介绍了Java语言中flush函数作用及使用方法详解,具有一定借鉴价值,需要的朋友可以参考下
主要介绍了IO中flush()函数的使用代码示例,具有一定借鉴价值,需要的朋友可以参考下
java.io.FileInputStream fis = new java.io.FileInputStream( new java.io.File("d:\\数据库.zip")); // 转换成网络输出流 java.net.ServerSocket ss = new java.net.ServerSocket(9000); java.net....
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; import javax....
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.Zip...
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import java.text....
需要即时写入的时候 调用 flush()方法,手动刷新缓冲流 注意 关闭流的时候也会自动刷新缓冲流中的数据 字节流转换为字符流 InputStreamReader(System.in) 适配器模式的使用 其意图是将一个类的接口转换成客户希望...
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io....
import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Server { public Server() { } public void listen() throws IOException { ServerSocket server = ...
import java.io.*; import java.net.*; public class link implements Runnable { public ServerSocket serversocket=null;//服务器套接字对象 public Socket socket=null;//客户端套接字 public PrintWriter ...
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax....
import java.io.File; import javax.imageio.ImageIO; import com.swetake.util.Qrcode; public class QRCodeEncoderTest { public static void main(String[] args) throws Exception { Qrcode qrcode=...
基于GUI用IO流中的ZipOutputStream ,ZipInputStream实现文件的解压与压缩, 如文件解压函数如下 private void unZip(String zipFileName, String outputDirectory)throws Exception { InputStream in=null; ...
用JAVA语言实现网络聊天import java.io.*; import java.net.*; import java.util.*; public class ChatHandler implements Runnable { protected Socket socket; protected ObjectInputStream dataIn; ...
在网络编程中对信息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息流的分析,包含了一些基本的软件工程的方法。经过分析这些情况,该局域网聊天工具采用Eclipse为基本开发环境和java语言...
动态INCLUDE用jsp:include动作实现 <jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态INCLUDE用include伪码实现,定不会检查所含文件的...