zoukankan      html  css  js  c++  java
  • 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字节

  • 相关阅读:
    第二章例2-11
    第二章例2-10
    例2-11
    例2-9+2-10
    例2-7+例2-8
    例2-5+2-6
    例2-4
    例2-3
    例2-2
    例2-1
  • 原文地址:https://www.cnblogs.com/zhengwenqiang/p/7873194.html
Copyright © 2011-2022 走看看