美文网首页
readLine 读取 socket 流的时候产生了阻塞

readLine 读取 socket 流的时候产生了阻塞

作者: 少寨主的互联网洞察 | 来源:发表于2020-05-22 20:37 被阅读0次

    BufferedReader 的 readLine 方法,只要读到流结束或者流关闭,就会返回 null

    在读取文件的时候,文件结尾就是流的结尾,但对于 Socket 而言不是的。不能认为流中数据读完了就是流的结尾了。Socket 流还在,还是能够继续读写的。所以用 Socket 的输入流封装的 BufferedReader 调用 readLine 方法,是不会返回 null 的。也就发生阻塞了。

    解决方案:
    第一种:读取 socket 流不用 BufferedReader,就用 InputStream
    第二种:客户端发送的时候,末尾添加换行符。取系统换行符 System.lineSeparator ()

    注意:
    使用 readLine 读取一行数据,并不是很好的方式。因为并不知道这一行到底有多大。理论上是可以被恶意攻击的。

    对于网络编程而言,请求与响应的数据格式要约定好。
    ① 每次都读取固定大小
    ② 每次读取的报文大小由报文头决定

    相关文章

      网友评论

          本文标题:readLine 读取 socket 流的时候产生了阻塞

          本文链接:https://www.haomeiwen.com/subject/lpbcahtx.html