`
uule
  • 浏览: 6308762 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

JAVA IO流中的flush

 
阅读更多

前言: 

   大家在使用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流中关闭和刷新的区别

    IO流中关闭和刷新的区别 因为内置缓冲区的原因,如果不关闭输出流,无法写出字符到文件中,但是关闭的流对象,是无法继续写出数据的,如果我们既想写出数据,又想继续使用流,就需要使用flush方法了 flush : 刷新...

    IO流的使用,自己的心得

    //每一次写入流 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 IO的flush的相关知识点内容,有需要的朋友可以跟着学习下。

    java操作串口linux环境下Java_gnu_io_RXTXPort_nativeDrain报错解决方案

    java控制串口发送数据时在windows环境下正常,linux环境下报错C [librxtxSerial.so+0x75da] Java_gnu_io_RXTXPort_nativeDrain+0xea,经多方查询验证为rxtx包版本问题,用本文档中的版本可以正常运行

    Java语言中flush()函数作用及使用方法详解

    主要介绍了Java语言中flush函数作用及使用方法详解,具有一定借鉴价值,需要的朋友可以参考下

    IO中flush()函数的使用代码示例

    主要介绍了IO中flush()函数的使用代码示例,具有一定借鉴价值,需要的朋友可以参考下

    计算机网络实验报告 获取MAC socket通信

    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....

    javaQQ聊天室+SocketTCP

    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....

    java算法,实现压缩及解压缩

     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...

    chatRoom 聊天室

    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....

    IO输入输出体系.rar

    需要即时写入的时候 调用 flush()方法,手动刷新缓冲流 注意 关闭流的时候也会自动刷新缓冲流中的数据 字节流转换为字符流 InputStreamReader(System.in) 适配器模式的使用 其意图是将一个类的接口转换成客户希望...

    java解析给定url

    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....

    Java实现远程屏幕监视

    import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Server { public Server() { } public void listen() throws IOException { ServerSocket server = ...

    桌面管家源码(java)

    import java.io.*; import java.net.*; public class link implements Runnable { public ServerSocket serversocket=null;//服务器套接字对象 public Socket socket=null;//客户端套接字 public PrintWriter ...

    基于JAVa的网上商城项目完整源码.zip

    import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax....

    java实现二维码生成

     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=...

    Java实现文件的压缩和解压

    基于GUI用IO流中的ZipOutputStream ,ZipInputStream实现文件的解压与压缩, 如文件解压函数如下 private void unZip(String zipFileName, String outputDirectory)throws Exception { InputStream in=null; ...

    JAVA实现SOCKET聊天

    用JAVA语言实现网络聊天import java.io.*; import java.net.*; import java.util.*; public class ChatHandler implements Runnable { protected Socket socket; protected ObjectInputStream dataIn; ...

    基于JAVA的聊天系统的设计与实现

    在网络编程中对信息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息流的分析,包含了一些基本的软件工程的方法。经过分析这些情况,该局域网聊天工具采用Eclipse为基本开发环境和java语言...

    java 面试题 总结

    动态INCLUDE用jsp:include动作实现 <jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态INCLUDE用include伪码实现,定不会检查所含文件的...

Global site tag (gtag.js) - Google Analytics