DataInputStream EOFEXCEPTION

在编写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字节

原文地址:https://www.cnblogs.com/zhengwenqiang/p/7873194.html