DataInputStream EOFEXCEPTION

时间:2023-03-09 09:05:23
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字节