public abstract int read()
                  throws IOException
This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.如红色部分所示,它所说的流的结束标志是什么?

解决方案 »

  1.   

    我只知道read读流结束会返回-1。
    流结束的标志是什么我也不知道,难道就是“后面木有了”??
    来个大神给解释解释
      

  2.   

    比如FileInputStream.read()如果到达文件末尾,则返回 -1至于java如何实现判断到达了文件末尾,这个不必深究
      

  3.   


    但是如果是通过socket openStream()获取的inputstream,如果网络延时很高,接受到一部分数据后另外一部分数据还未到达,read()返回什么:如果返回-1,我怎么处理剩余的数据? 还是其它什么情况比如block,求大神详解
      

  4.   

    如果另外的数据没有到达,接收端的read方法会一直等待……,只有客户端读到文件结尾的时候,才会向服务端传递结束标志-1!
      

  5.   

    sorry,应该是当客户端的套接字关闭的时候,服务端会收到结束标志-1!s.shutdownOutput();
      

  6.   

    至于为什么读取文件的时候不会读取到-1,
    你得看看inputStream类的read()的方法的返回值!改方法读取文件的一个字节,可是返回类型却是int型!
    它在读取的字节前是补了24个0,这样就不会和结束标记-1(即1111-1111 1111-1111 1111-1111 1111-1111)相冲突了!
    至于为什么-1定义为结束标记!这个是惯例~~~
      

  7.   

    是不是应该加个close(),关闭输入流。
      

  8.   

    应该不是,只是说指针到文件末尾了,read方法会返回-1的吧!当然也是我猜测的~~~
      

  9.   

    结束标识符好像是 EOF 吧