大家好:
今天我想介绍一下socket中字节流的读取方式,避免在socket读取过程中发生的断包问题。
1.设计字节发送的方式
在字节流的读写过程中,需要先发送一个代表发送内容长度的字节,然后再发送内容,在接收端先接受发送端发送的内容长度,再根据长度来读取相应的内容。
2.构建字节流的读写类
- BufferedInputStream in = new BufferedInputStream(socket.getInputStream());
- BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());
3.发送端的发送方式
- out.write(NumberUtil.intToByte(data.length));// NumberUtil类是把int和字节转换的类,在附件中附送
- out.write(data);
- out.flush();
4.接收端的接收方式
- protected byte[] read() throws IOException {
- byte[] buf = null;
- // 读取长度
- int contentLength = readInt();
-
- // 如果消息的长度不够
- if (contentLength > in.available(