// 读取数据
private class readThread extends Thread { public void run() {
BufferedInputStream inStream = null;
String s = new String();
try {
inStream = new BufferedInputStream(socket.getInputStream());
while (true) {
byte[] buffer = new byte[1024];
inStream.read(buffer);
String str = new String(buffer);
Log.i("", str.trim());
s += str.trim();
Log.i("333333333333333333", s);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
Message msg = new Message();
Log.i("222222222", s);
msg.obj = s;
msg.what = 1;
LinkDetectedHandler.sendMessage(msg);
s = new String();
}
}
}为什么finally里的代码不执行?
private class readThread extends Thread { public void run() {
BufferedInputStream inStream = null;
String s = new String();
try {
inStream = new BufferedInputStream(socket.getInputStream());
while (true) {
byte[] buffer = new byte[1024];
inStream.read(buffer);
String str = new String(buffer);
Log.i("", str.trim());
s += str.trim();
Log.i("333333333333333333", s);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
Message msg = new Message();
Log.i("222222222", s);
msg.obj = s;
msg.what = 1;
LinkDetectedHandler.sendMessage(msg);
s = new String();
}
}
}为什么finally里的代码不执行?
死循环会让read方法异常,异常时就会跳出我知道你说的,在死循环中,read肯定会出现异常。但是为什么没有执行finally!
byte[] buffer = new byte[1024];
while ((data=System.in.read())!=-1) {
inStream.read(buffer);
String str = new String(buffer);
Log.i("", str.trim());
s += str.trim();
Log.i("333333333333333333", s);
}
再好好看看read()方法
LZ何以肯定read就会出现异常?read是个阻塞方法,如果没有数据,你的read就被堵塞着,除非关闭socket什么的
while (true) {
throw new IOException("异常抛给你看,finally执不执行");
Log.i("333333333333333333", s);
}
当read读完时就阻塞了
throw new IOException("异常抛给你看,finally执不执行");
Log.i("333333333333333333", s);
}
试试 看
香香看
int result = inStream.read(buffer);
if (result < 1)
break;
这样读取到末尾后就跳出循环?
private class readThread extends Thread { public void run() { try {
BufferedReader br = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String s = new String();
String readString = null;
while ((readString = br.readLine()) != null) {//流读取为空时阻塞
Log.i("", readString.trim());
s += readString.trim();
Log.i("333333333333333333", s);
}
Log.i("222222222", s);
Message msg = new Message();
msg.obj = s;
msg.what = 1;
LinkDetectedHandler.sendMessage(msg);
s = new String();
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
}
我单步调试发现是流读取阻塞。
现在如何解决阻塞!请大侠指点!
read 确实会抛IO异常 不过 read是阻塞方法api文档:“读取单个字符。在字符可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞”