InputStream is=socket.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(is));//将字节流包装成字符流 PrintStream ps=new PrintStream(socket.getOutputStream());//printstream中有写出换行的方法这段代码什么意思
时间: 2023-10-25 14:02:58 浏览: 49
这段代码的作用是获取Socket实例的InputStream和OutputStream,并将它们包装成BufferedReader和PrintStream的实例,以便我们可以使用这些实例来读取客户端发送的消息和向客户端发送响应消息。
具体来说,这段代码中,我们首先使用socket.getInputStream()方法获取Socket实例的InputStream,然后将其包装成BufferedReader实例。这样,我们就可以使用BufferedReader的readLine()方法来读取客户端发送的消息。
接着,我们使用socket.getOutputStream()方法获取Socket实例的OutputStream,并将其包装成PrintStream实例。这样,我们就可以使用PrintStream的print()、println()等方法向客户端发送响应消息。PrintStream中包含有写出换行的方法,例如println()方法可以在输出的末尾添加一个换行符。
总之,这段代码的作用是将Socket的InputStream和OutputStream包装成BufferedReader和PrintStream的实例,以便我们可以使用这些实例来进行服务端与客户端的通信。
相关问题
InputStream input = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(input));分析一下这串代码
这段代码是用于通过网络套接字获取输入流,并将其转换为字符流进行文本读取。
首先,使用`socket.getInputStream()`从给定的`socket`对象获取输入流`input`。这个输入流是一个字节流,用于读取从网络套接字接收到的字节数据。
然后,使用`InputStreamReader`将字节流`input`转换为字符流。`InputStreamReader`是一个字符流的桥梁,它将字节流转换为字符流,可以指定字符编码来解码字节数据。
最后,将转换后的字符流传递给`BufferedReader`的构造函数创建一个`br`对象。`BufferedReader`是一个字符缓冲输入流,它提供了一次读取一行文本数据的便利方法。
整个代码的作用是创建了一个可以从网络套接字接收文本数据的`BufferedReader`对象。通过使用`br.readLine()`方法,可以方便地一次读取一行文本数据,而不需要手动处理换行符。
public void run(){ PrintWriter pw = null; try { InputStream in = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(in, "utf-8"); BufferedReader br = new BufferedReader(isr); OutputStream out = socket.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(out, "utf-8"); BufferedWriter bw = new BufferedWriter(osw); pw = new PrintWriter(bw, true); synchronized (Server.this){//限制自身 map.put(host,pw); pws = Arrays.copyOf(pws,pws.length+1); pws[pws.length-1] = pw; } send(host+"上线了,当前在线人数:"+pws.length);
这段代码是一个多线程聊天室服务器端的run()方法。首先,创建一个PrintWriter对象pw,用于向客户端发送消息。接着,通过socket.getInputStream()获取输入流,通过InputStreamReader将字节流转化为字符流,并指定字符编码为"utf-8"。再通过BufferedReader对字符流进行缓冲读取。同时,通过socket.getOutputStream()获取输出流,通过OutputStreamWriter将字符流转化为字节流,并指定字符编码为"utf-8"。再通过BufferedWriter对字节流进行缓冲写入。最后,通过PrintWriter将字符流转换为字节流,并自动刷新缓冲区,发送消息给客户端。在synchronized块中,将当前客户端的输出流pw存入map集合中,方便后面广播消息使用。同时,将pws数组扩容,并将当前客户端的输出流pw存入pws数组中。最后,向所有客户端发送上线消息及当前在线人数。