1)发送完后调用Socket的shutdownOutput()方法关闭输出流,这样对端的输入流上的read操作就会返回-1。 注意不能调用socket.getInputStream().close()。这样会导致socket被关闭。 当然如果不需要继续在socket上进行读操作,也可以直接关闭socket。 但是这个方法不能用于通信双方需要多次交互的情况。 2)发送数据时,约定数据...
我们还可以使用多线程来避免InputStream的阻塞。通过一个独立线程来读取输入流的数据,这样主线程就不会被阻塞。 importjava.io.IOException;importjava.io.InputStream;importjava.net.Socket;publicclassInputStreamThreadExample{publicstaticvoidmain(String[]args){try(Socketsocket=newSocket("example.com",80)){Input...
// 阻塞式读取数据intdata;while((data=inputStream.read())!=-1){// 每次读取到数据就输出System.out.print((char)data);// 将数据转为字符并打印} 1. 2. 3. 4. 5. 6. 关闭连接 // 关闭连接clientSocket.close();serverSocket.close();}catch(IOExceptione){e.printStackTrace();}}} 1. 2. ...
Socket.InputStream 属性 参考 反馈 定义 命名空间: Java.Net 程序集: Mono.Android.dll 返回此套接字的输入流。 public virtual System.IO.Stream? InputStream { [Android.Runtime.Register("getInputStream", "()Ljava/io/InputStream;", "GetGetInputStreamHandler")] get; } 属性...
1)Socket任意一端在调用完write()方法时调用shutdownOutput()方法关闭输出流,这样对端的inputStream上的read操作就会返回-1,这里我们要注意下不能调用socket.getInputStream().close()。因为它会导致socket直接被关闭。当然如果不需要继续在socket上进行读操作,也可以直接关闭socket。但是这个方法不能用于通信双方需要多...
在Java Socket 编程中,对 InputStream的read()=-1标明流结束,一般按照 publicbyte[] getReqData(InputStream is){ ByteArrayOutputStream baos =newByteArrayOutputStream(); try{ intiR = is.read(); while(iR != -1){ baos.write(iR); iR = is.read(); ...
Java中的read方法通常是指InputStream类中的read方法,该方法用于从输入流中读取数据。当没有可读取的数据时,read方法会阻塞等待数据的到达。如果需要取消read方法的阻塞,可以通过以下几种方式实现: 设置输入流的超时时间:可以使用InputStream的子类如SocketInputStream、FileInputStream的setSoTimeout方法来设置超时时间。
写了一个简单的web后台,用socket接收并解析http请求。然而在网页发出第一次请求时总会卡住(其实是流阻塞了),刷新后可以访问。以及总是读取不到最后一部分数据。 刚开始是这样写的 privateStringgetStringFromIOStream(InputStreamios){BufferedReaderreader=newBufferedReader(newInputStreamReader(ios));StringBuilderret=ne...
例如,来自InputStream的Socket套接字将阻塞,而不是返回 EOF,直到收到设置了 FIN 标志的 TCP 数据包。当从这样的流中接收到 EOF 时,您可以确信在该套接字上发送的所有数据都已可靠地接收到,并且您将无法再读取任何数据。 (另一方面,如果阻塞读取导致异常,一些数据可能已经丢失。) ...