在编写socket通信时,服务端使用了DataInputStream.readUTF()读取字节流时,出现EOFEXCEPTION
原因是客户端没有使用DataOutputStream.writeUTF()来传输数据流,而是使用OutputStream.write()方法写入字节数组。
导致服务端接收到的字节流的头两个字节没有指明字节流的长度。解决办法之一是:
使用OutputStream.write(byte[] b)时;需要先写入两个字节代表字节流长度
OutputStream out = socket.getOutputStream(); String str = "北京码农_DataInputStream"; // 先发送无符号数 int length = str.length(); byte[] b = new byte[2]; b[0] = (byte) (length>>8); b[1] = (byte) length ; out.write(b); // 再发送字节数组 out.write(str.getBytes()); out.write(new byte[]{(byte)(15<<4)}); out.flush();
另外,复习下java平台基本数据类型长度的知识:
byte 1字节 char 2字节 short 2字节 int 4字节 float 4字节 long 8字节