weixin_44555034 2021-04-22 21:27 采纳率: 100%
浏览 349
已采纳

ObjectInputStream的invalid stream header的问题

public class Server {
  static ExecutorService executor = new ThreadPoolExecutor(30, 60, 3L, TimeUnit.HOURS,
      new ArrayBlockingQueue<Runnable>(15), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());

  public static void main(String[] args) {
    ThreadPoolExecutor executor1 = (ThreadPoolExecutor) executor;
    try {
      ServerSocket serverSocket = new ServerSocket(6688);
      Socket socket = null;
      while (true) {
        System.out.println("服务器:开始监听6688");
        socket = serverSocket.accept();
        myruns command = new myruns(socket);
        new Thread(command).start();
        executor.execute(command);
        System.out.println("第" + executor1.getActiveCount() + "个客户端连接服务器");
      }
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

  }
}

class myruns implements Runnable {
  Socket socket = null;
  ObjectInputStream ois = null;

  public myruns(Socket socket) {
    this.socket = socket;
  }

  @Override
  public void run() {
    // TODO Auto-generated method stub
    try {
      ois = new ObjectInputStream(socket.getInputStream());
      while (true) {
        while (ois.available() != -1) {
          Thread.sleep(1000);
          try {
            User user = (User) ois.readObject();
            System.out.println(user.toString());
          } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
        }
      }
    } catch (Exception e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    } finally {
      Thread.interrupted();
    }
  }

}

这个是服务端的代码

public class Client {
  static Data data = Data.getInstance();
  static App app = new App();

  public static void main(String[] args) throws UnknownHostException, IOException {

    Socket socket = new Socket("127.0.0.1", 6688);
    try {
      ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
      while (true) {
        if (data.getS1().equals("退出系统")) {
          socket.close();
          System.exit(0);
        }
        objectOutputStream.writeObject(new User());
      }
    } catch (Exception e) {
      // TODO: handle exception
      e.printStackTrace();
    }
  }
}

这个是客户端的

究极萌新想问问各位大牛 这个到底咋回事 在教室看了一天没看出来咋解决 哭了哭了。

public class User implements Serializable {<!-- -->

对象也是序列化的了。。

java.io.StreamCorruptedException: invalid stream header: ACED7372
        at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:936)
        at java.io.ObjectInputStream.<init>(ObjectInputStream.java:394)
        at Common.myruns.run(Server.java:59)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
java.io.StreamCorruptedException: invalid stream header: 00050009
        at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:936)
        at java.io.ObjectInputStream.<init>(ObjectInputStream.java:394)
        at Common.myruns.run(Server.java:59)
        at java.lang.Thread.run(Thread.java:748)

QAQ这个异常搞了我几天了

  • 写回答

1条回答 默认 最新

  • weixin_44555034 2021-04-25 15:42
    关注

    不使用线程池就一点问题都没有了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵