1. 在服务端使用PrintWriter将数据帧作为一行写入Socket输出流:2. 代码示例如下:java PrintWriter writer = new PrintWriter(socket.getOutputStream());writer.println(data);2. 在客户端,通过BufferedReader逐行读取Socket输入流的数据:2. 代码示例如下:java BufferedReader reader = new BufferedReader...
socket 其实用的是IO流来交互的,在inputstream read得到-1 因为已到达流末尾而不再有数据可用,则返回 -1。read有时候会出现阻塞,在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞
while ((len = reader.read(chars))!= -1){ String s = new String(chars,0,len); //处理读入的数据 } 在网上看别人介绍Socket类用法的时候也大都这么使用这种方式接收数据。 read()源码注释也指出当读完数据时返回-1。 然而,当我跑程序的时候却发现,read()执行第二次的时候,当前线程会挂起。 后来在...
对于Inputstream.read()而言,Java中在socket通信时,有相应的处理机制,可以在客户端调用Socket.shutdownOutput()方法告诉服务器。read()方法是读到-1从而continue。但是,Java和C通信的话,read()会读取客户端发送过来的数据,如果无数据可读,就会阻塞直到有数据可读。这样就会出现IO阻塞了。客户端收不到服务器返回的消息。
1. 关于InputStream.read() 在从数据流里读取数据时,为图简单,经常用InputStream.read()方法。这个方法是从流里每次只读取读取一个字节,效率会非常低。 更好的方法是用InputStream.read(byte[] b)或者InputStream.read(byte[] b,int off,int len)方法,一次读取多个字节。
socket 流文件是从网络上进行数据读取。在 socket 流文件中,当客户端进程通过 read 函数读取远程服务端...
1、客户端和服务器端的交互 服务器端 import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; ...
private String getStream(String url){ //获取字节流 InputStream in = null; String result = ""; try { in = new URL(url).openStream(); int tmp; while((tmp = in.read()) != -1){ result += (char)tmp; } } catch (MalformedURLException e) { ...
效率会非常低。 更好的方法是用InputStream.read(byte[] b)或者InputStream.read(byte[] b,int...