日期:2014-05-20  浏览次数:20728 次

java TCP 编程,读取一个永不断开InputStream,怎样保证数据完整,不断开流,并且把数据处理好?
[code=Java][/code]
public void run() {
try {
// 读取输入流,如果由于流末尾已到达而不再有数据,则返回 -1,表示对方已经关闭.
BufferedInputStream bufInput = new BufferedInputStream(in);
streamData = new ByteArrayOutputStream();
//服务器接收流,如果对方的流永不断开,while无法结束,
//也不能进行数据加工处理,我想能否在流读取部分完整数据后,分批处理。
//这样就算流不断,我也可以边读,边处理数据。不知道怎么写好?
while ((len = bufInput.read(b)) != -1) {
streamData.write(b, 0, len);
}
bufInput.close();
in.close();
socket.close();
// 获取数据流后,把数据交给处理流数据对象,使得读取数据与处理数据分离.
if(streamData.size()>0){
new Thread(new ProcessRequestData(clientClass,cSupport,streamData)).start();
}else{
System.out.println("收到数据流数据内容为 0 字节.");
streamData.close();
}
} catch (SocketException se) {
se.printStackTrace();
} catch (IOException io) {
io.printStackTrace();
} finally{
ReleaseResource();
}
}


------解决方案--------------------
读取Socket流,你应该先约定自己的协议。譬如首先传递一行数字,表明后续要发送的数据共有几长。客户端就可以根据这个长度来读取Socket流了



所以你应该定好客户端与服务器的协议
------解决方案--------------------
永不断开不太现实吧. 如果出现异常,一般需要再重新连接一下,这样才能真正实现"永不断开"