在不知道流的长度下,怎样判断从socket中读取的字节流结束?

来源:互联网 发布:知柏地黄丸 肾炎 编辑:程序博客网 时间:2024/05/29 15:19

我尝试过使用read() = -1这种方法来判断是否读完字节流

Java代码 复制代码
  1. DataInputStream in = new DataInputStream(socket.getInputStream());   
  2. ByteArrayOutputStream swapStream = new ByteArrayOutputStream();   
  3. int read = 0;   
  4. while ( (read = in.read()) != -1 ) {   
  5.     swapStream.write(read);   
  6. }  

 

结果还是不行,如果socket没有接收到数据,它不会返回-1,所以这个循环就一直在等着。。直到把socket关闭才会退出循环。。

 

后来我使用了read(b, off, len)这个方法,还是不行

Java代码 复制代码
  1. DataInputStream in = new DataInputStream(socket.getInputStream());   
  2. ByteArrayOutputStream swapStream = new ByteArrayOutputStream();   
  3. int read = 0;   
  4. byte[] buff = new byte[100];   
  5. while ( (read = in.read(buff, 0100)) > 0 ) {   
  6.     swapStream.write(buff, 0, read);   
  7. }  

 

请各位指教下,不胜感谢


问题补充:
其实我是这样做的

ServerSocket server = new ServerSocket();
while (true) {
  socket = server.accept();
  new TCPThread(socket); //新建一个线程处理字节流
}

TCPThread里的就是我上面贴的读取字节流代码,我是想用户每发送一次数据后,可以处理这些数据。然后不想发送了,才关掉socket连接

原创粉丝点击