java - 通过套接字发送对象、int 和 String、序列化

标签 java serialization

因此,当用户单击列表时,我有一个 PrintWriter 和一个 ObjectOutputStream 尝试从客户端发送 int、String 和 Color[],其中“out”是 PrintWriter,outObject 是 ObjectOutputStream。

private class MyMouseListener implements MouseListener{
  public void mouseExited(MouseEvent e){}
  public void mouseEntered(MouseEvent e){}
  public void mouseClicked(MouseEvent e){
      if(e.getSource() == list){
          int index = list.locationToIndex(e.getPoint());   ///get the game that the player has selected          
          try{
              out.println(index);
                              out.println("hel");
                              Color[] colors = new Color[5];
                              outObject.writeObject(colors)
          }
}

服务器,其中“in”是扫描仪,“objectIn”是一个objectInputStream:

                while(true)
                    if(in.nextLine().equals("hel")){
                    System.out.println("fee");
                }
                else if(in.hasNextInt()){
                    System.out.println("dee");
                }
                Object o = objectIn.readObject();
                if(o instanceof Color[]){
                    System.out.println("ree");
                }

如果我尝试发送全部三个,则第一次单击时服务器仅注册字符串,然后服务器仅注册 int 后的所有单击,从不注册 Color[],如果我先发送 int,则Color[],然后是 int,如:`

                              out.println(index);
                              Color[] colors = new Color[5];
                              outObject.writeObject(colors);
                              out.println("hel");

首先仅注册 int 和 Object,第二次仅单击 String,然后仅单击 int。 `

                Object o = objectIn.readObject();
                if(in.nextLine().equals("hel")){
                    System.out.println("fee");
                }
                //Object o = objectIn.readObject(); 
                else if(in.hasNextInt()){
                    System.out.println("dee");
                }
                else if(o instanceof Color[]){
                    System.out.println("ree");
                    o = null;
                }

如果我使用上述一系列 if 语句,则不会注册任何内容

使用第一系列 if 语句,如果我尝试单独发送 Color[],则它不会注册,但如果我用 int 发送它,则两者都会注册。 如果我尝试发送字符串和 Color[],请先发送字符串,如下所示:

              out.println("hel");
              Color[] a = new Color[5];
              outObject.writeObject(a);

两者都注册一次,然后就不再注册,而且以与预期相反的方式注册,即首先注册 Color[],然后注册 String;如果我先发送 Color[],然后发送 String,则两者都不会注册。

最佳答案

我假设您的 out 对象(它是一个 PrintWriter)包装了 outObject 对象,它是 ObjectOutputStream >。对于同一底层连接,不应同时使用 PrintWriterObjectOutputStream。请参阅this question了解更多详情。

关于java - 通过套接字发送对象、int 和 String、序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20302623/

相关文章:

c# - C#中序列化修改原始对象的内容

c - c 和缓冲区中的多态性

java - 为什么我们不能序列化 Java 中的方法?

java - 如何在android studio中禁用某些按钮例如2分钟

java - 如何将 Bolt 驱动程序与 Spring Boot/Data Neo4j 一起使用

java - swt中使用FormLayout输入表单

java - JSF 2 - @ViewScoped bean 在请求之间存在于何处?

c++ - 如何使用 boost::serialization 序列化 std::vector?

java - 当我注册时,Firebase 实时数据库不会更新数据库

Java方法调用格式