通过套接字,序列化发送对象,int和String

时间:2013-11-30 16:26:19

标签: 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发送它们都注册了。 如果我尝试发送String和Color [],首先发送字符串,如下所示:

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

两者都被注册一次然后再次注册,也是以与预期相反的方式注册,即首先注册Color []然后注册String;如果我首先发送两个颜色[],然后字符串都没有注册。

1 个答案:

答案 0 :(得分:1)

我假设您的out对象(PrintWriter)包裹outObject对象,即ObjectOutputStream。您不应同时使用PrintWriterObjectOutputStream作为相同的基础连接。有关详细信息,请参阅this question