我的代码是这样的:从一个socket中读取数据,Socket appsocket = .....(为一个socket)
InputStream s_in = appsocket.getInputStream();
PrintStream s_out = new PrintStream(appsocket.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(s_in));s_out.write(); 内容省略掉了 ,就是写入一句话,会返回多行信息接着去读数据while ((contentLine = br.readLine()) != null) {
}读取了所有的内容,也发现读取完了。但是程序一直等在while那里,也就是读完了也不跳出去,然后后台报错,socketreadtimeout,说是读超时了 ,这些流和端口都在finally里正常关闭了的。请高手帮忙看看是什么原因啊,为什么读完了也不返回null,也就不跳出,怎么才能让它读完后跳出while接着执行下面的代码啊!!!!
InputStream s_in = appsocket.getInputStream();
PrintStream s_out = new PrintStream(appsocket.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(s_in));s_out.write(); 内容省略掉了 ,就是写入一句话,会返回多行信息接着去读数据while ((contentLine = br.readLine()) != null) {
}读取了所有的内容,也发现读取完了。但是程序一直等在while那里,也就是读完了也不跳出去,然后后台报错,socketreadtimeout,说是读超时了 ,这些流和端口都在finally里正常关闭了的。请高手帮忙看看是什么原因啊,为什么读完了也不返回null,也就不跳出,怎么才能让它读完后跳出while接着执行下面的代码啊!!!!
解决方案 »
- Java 有类似Adobe Framework的Class Diagram类图海报吗?
- 关于C#
- 关于JComboBox和数据类型转换
- 如何用java查看电脑的电池剩余电量,CPU的使用率
- 英文系统中安装Jbuilder2005和金山词霸有冲突!
- 怎样在一个public class MyClass{} 这样的java类中得到当前运行的tomcat中的虚拟目录的觉对路径?
- 文件格式转换问题,再线等,急
- JTable如何加入记录闪烁功能??
- 我的IE浏览器崩溃,怎么办?(不能浏览了!)急。。。。。
- java错误找不到java.lang.Object,求救大佬们
- 关于字节转换字符问题
- 有谁做过java客户端,有那个类来实现通信
所以它会一直在哪里读,不会向下执行,只有用线程分开执行。
你可以把读到的数据放到队列里去,由另一个处理线程来处理队列中的数据。while ((contentLine = br.readLine()) != null) {
// contentLine 放入队列}
if(contentLine.equals("end"))
break;
或者直接把输出流关闭,如
OutputStream socketOut = socket.getOutputStream();
socketOut.write(sb.toString().getBytes());
socket.shutdownOutput();
完后再读
现在是这样的,我需要对每一行做不同的处理,所以用的readline会方便很多,关键是要在循环结束后还要对结果做处理,也就是用线程也不太好处理,要确保每一行都读完。我现在的想法就是,在while里面把读到的每一行写进一个文件里面,然后捕获超时异常,在catch里面再读取文件里面的内容,不知道这样会不会有问题的
不用线程什么的,那你就想7楼所说的,在文件的最后你都加“end”或者其他的字符串表示结束,然后你在while条件里加上“end”条件表示读取文件结束。
应该可以满足你的需求!
关键我要读取的东西也不是确定的,没法加结束符啊,我要读取的是自己写入的一个命令返回的结果,不同设备执行这个命令返回的结果是不一样的,我现在想的就是,在while里面把读到的每一行写进一个文件里面,然后捕获超时异常,在catch里面再读取文件里面的内容,不知道这样会不会有问题的