read timed out如何解决_Java输入流read()和readline()方法对比分析【实例讲解】

在TCP/IP通信中遇到`java.net.SocketTimeoutException: Read timed out`问题,原因是read()方法会无限读取重复数据导致超时。解决方案是改用readline()方法,它在遇到换行符时停止读取,适合连续发送的输入流。文章对比分析了read()和readline()的使用场景。
摘要由CSDN通过智能技术生成

9042a7510603d946782c66d53f9d7916.gif

Hello!大家好哇,我是灰小猿,一个超会写bug的程序猿,

最近一直在做项目的开发,所以很少有时间来打理博客,今天抽出一点时间来对我在开发中遇到的一些小问题和大家分享一下,

在做使用TCP/IP协议进行网络通信时,遇到这样一个问题,就是在同一个局域网中,我作为客户端,以另一台电脑作为服务器进行通信时发现,两者之间可以建立C/S连接,但是对于服务器发送过来的数据,我这边以read()方法来读取字符的输入流的长度时却显示读取失败,报错类型为;

java.net.SocketTimeoutException: Read timed out

即读取时间超时,但是从服务器发送过来的数据并不很长,所以按照正常情况下读取超时的情况一般是不会出现的,经过仔细研究发现是因为read()方法读取的是单个字符,会以流末尾作为结束,也就是说只要连接方一直在重复的发送数据,

那么read()就会一直在读取一个很长的输入流,这样的话当然就会很容易造成读取超时的问题了,而我做的测试也正是让服务器端一直在向客户端发送相同的数据。显然以read()方法来读取这样的操作是显然

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值