InputStream input = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(input));分析一下这串代码
时间: 2023-10-25 09:52:50 浏览: 183
这段代码是用于通过网络套接字获取输入流,并将其转换为字符流进行文本读取。
首先,使用`socket.getInputStream()`从给定的`socket`对象获取输入流`input`。这个输入流是一个字节流,用于读取从网络套接字接收到的字节数据。
然后,使用`InputStreamReader`将字节流`input`转换为字符流。`InputStreamReader`是一个字符流的桥梁,它将字节流转换为字符流,可以指定字符编码来解码字节数据。
最后,将转换后的字符流传递给`BufferedReader`的构造函数创建一个`br`对象。`BufferedReader`是一个字符缓冲输入流,它提供了一次读取一行文本数据的便利方法。
整个代码的作用是创建了一个可以从网络套接字接收文本数据的`BufferedReader`对象。通过使用`br.readLine()`方法,可以方便地一次读取一行文本数据,而不需要手动处理换行符。
相关问题
InputStream is=socket.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(is));//将字节流包装成字符流 PrintStream ps=new PrintStream(socket.getOutputStream());//printstream中有写出换行的方法这段代码什么意思
这段代码的作用是获取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的实例,以便我们可以使用这些实例来进行服务端与客户端的通信。
private class ClientRunnable implements Runnable{ @Override public void run() { try { InputStream in = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(in, "utf-8"); BufferedReader br = new BufferedReader(isr); String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } } } }
这是一个Java内部类ClientRunnable,实现了Runnable接口,用于处理客户端接收消息的线程。在run()方法中,首先通过socket获取到输入流in,然后创建InputStreamReader对象isr,使用utf-8编码将in转换为字符流。接着,使用BufferedReader类包装isr,以便逐行读取数据。在while循环中,不断从缓冲流中读取一行数据,直到读取到的数据为空为止。每读取一行数据,就将其打印到控制台上。如果发生异常,则将异常打印出来。
阅读全文