引言
因为我确实不懂TCP通信这一块儿,最近项目中要实现客户端接收服务器端发送过来的数据(这个数据是int型的,范围是0~360,而且服务器端用C语言写的,每一秒发送一次,客户端只需要不断接收就好了),很开心的用BufferedReader读取数据,结果发现一直读取不到数据,这下就慌了,搞了整整半天才用DataInputStream通过byte读取到数据。
一、BufferedReader
BufferedReader可以从字符输入流中读取文本,通过缓存来达到高效的读取字符、数组等数据。
说白了用它是因为它比较高效,它里边默认缓冲区的大小是8k。说下它的两个主要的函数:
1.Read() 读取并返回一个单一的字符,做为int类型返回,这个类型的范围是0~65535,因为一个char的范围是-128~128,实际值是-128~127,当读取的值大于等于128时,返回的均是65535,具体代码如下:
public class TcpConnection extends Thread { private String ipAddress; private int ipPort; TcpResult tcpResult; public TcpResult getTcpResult() { return tcpResult; } public void setTcpResult(TcpResult tcpResult) { this.tcpResult = tcpResult; } public TcpConnection(String address, int port) { this.ipAddress = address; this.ipPort = port; } Socket socket; InputStream is; BufferedReader br; @Override public void run() { super.run(); try { socket = new Socket(ipAddress, ipPort); socket.setSoTimeout(20000); if (socket.isConnected() && !socket.isClosed()) { is = socket.getInputStream(); Log.e("test", "connect success"); br = new BufferedReader(new InputStreamReader((is)); new Thread(new Runnable() { @Override public void run() { int data = 0; try { while ((data=br.read())!=-1) {