码迷,mamicode.com
首页 > 其他好文 > 详细

BufferedReader的ready与readLine使用,以及Premature EOF异常

时间:2014-08-10 15:24:10      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   java   使用   io   数据   

  有些人在读取服务器端返回的数据的时候,使用了BufferedReader类的ready:

1 while(reader.ready()) {
2  //执行读取操作,即readLine 
3 }

  这个方法很经常被用到, 但是返回的却都是空,这是什么原因呢,查看了一下帮助文档,以及上网查了查,总结如下:

  1. ready是查看流是否已经准备好被读,是一个非阻塞的方法,所以会立刻返回,由于服务器没有准备好被读,所以会立刻返回,所以读取到的都是null。

  2. readLine是一个阻塞的方法,只要没有断开连接,就会一直等待,直到有东西返回,那么什么时候返回空呢,只有读到数据流最末尾,才返回null。

  以上摘自:http://blog.csdn.net/neusoftware_20063500/article/details/3723176

  实际上,在读网络数据的时候经常会遇到数据延迟等问题。这时候直接运行读网络流中的数据时很容易遇到 java.io.IOException: Premature EOF的异常。 这时就可以使用 ready函数查看BufferedReader是否已经准备好。

while(!reader.ready){ //阻塞,等待一段时间 } 
while(reader.readLine()!==null){ //执行操作 }

  特别要注意的是当reader.readLine已经读完之后,如果继续执行ready操作,会返回false; 因此,下面两段代码可能造成死循环:

  1. 

while(reader.readLine()!==null){
      //执行操作  
     while(!reader.ready){  
     //阻塞,等待一段时间   
    }  
}

2. 

while(reader.readLine()!==null){
  //执行操作
  }  
while(!reader.ready){
  //阻塞,等待一段时间  
}

 

BufferedReader的ready与readLine使用,以及Premature EOF异常,布布扣,bubuko.com

BufferedReader的ready与readLine使用,以及Premature EOF异常

标签:style   blog   http   color   java   使用   io   数据   

原文地址:http://www.cnblogs.com/forzhongyou/p/3902765.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!