title: Java invalid stream header Problem
body: <p>im writen a client-server app, and now i´m facing a problem that I dont know how to solve:</p>
  
  <p>This is the client:</p>
  
  <pre><code>try
          {
  
              Socket socket = new Socket(ip, port);
  
  
              ObjectOutputStream ooos = new ObjectOutputStream(socket
                      .getOutputStream());
              SendMessage message = new SendMessage();
  
              message.numDoc = value.numDoc;
              message.docFreq = value.docFreq;
  
              message.queryTerms = query;
              message.startIndex = startIndex;
              message.count = count;
              message.multiple = false;
              message.ips = null;
              message.ports = null;
  
              message.value = true;
              message.docFreq = value.docFreq;
              message.numDoc = value.numDoc;
              ooos.writeObject(message);
  
  
              ObjectInputStream ois = new ObjectInputStream(socket
                      .getInputStream());
              ComConstants mensajeRecibido;
              Object mensajeAux;
              String mensa = null;
  
              byte[] by = null;
  
              do
              {
  
                  mensajeAux = ois.readObject();
  
                  if (mensajeAux instanceof ComConstants)
                  {
  
  
                      System.out.println("Thread by Thread has Search Results");
  
                      String test;
  
                      ByteArrayOutputStream testo = new ByteArrayOutputStream();
  
                      mensajeRecibido = (ComConstants) mensajeAux;
  
                      byte[] wag;
  
                      testo.write(
                              mensajeRecibido.fileContent, 0,
                              mensajeRecibido.okBytes);
  
                      wag = testo.toByteArray();
  
  
                      if (by == null) {
  
                          by = wag;
  
                      }
                      else {
  
                          int size = wag.length;
  
                            System.arraycopy(wag, 0, by, 0, size);
                      }
  
  
                  } else
                  {
  
                      System.err.println("Mensaje no esperado "
                              + mensajeAux.getClass().getName());
                      break;
                  }
              } while (!mensajeRecibido.lastMessage);
  
  
  
  
              //ByteArrayInputStream bs = new ByteArrayInputStream(by.toByteArray()); // bytes es el byte[]
              ByteArrayInputStream bs = new ByteArrayInputStream(by);
              ObjectInputStream is = new ObjectInputStream(bs);
              QueryWithResult[] unObjetoSerializable = (QueryWithResult[])is.readObject();
              is.close();
  
              //AQUI TOCARIA METER EL QUICKSORT
  
              XmlConverter xce = new XmlConverter(unObjetoSerializable, startIndex, count);
              String serializedd = xce.runConverter();
  
  
  
          tempFinal = serializedd;
  
              ois.close();
              socket.close();
  
          } catch (Exception e)
          {
              e.printStackTrace();
          }
  
          i++;
  
          }
  </code></pre>
  
  <p>And this is the sender:</p>
  
  <pre><code>try
      {
  
          QueryWithResult[] outputLine;
  
          Operations op = new Operations();
  
          boolean enviadoUltimo=false;
  
          ComConstants mensaje = new ComConstants();
          mensaje.queryTerms = query;
  
          outputLine = op.processInput(query, value);
  
          //String c = new String();
          //c = outputLine.toString();
          //StringBuffer swa = sw.getBuffer();
  
          ByteArrayOutputStream bs= new ByteArrayOutputStream();
  
          ObjectOutputStream os = new ObjectOutputStream (bs);
          os.writeObject(outputLine);
          os.close();
  
          byte[] mybytearray =  bs.toByteArray();
  
          ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(mybytearray); 
  
          BufferedInputStream bis = new BufferedInputStream(byteArrayInputStream);
  
          int readed = bis.read(mensaje.fileContent,0,4000);
  
  
          while (readed &gt; -1)
          {
  
  
              mensaje.okBytes = readed;
  
  
              if (readed &lt; ComConstants.MAX_LENGTH)
              {
                  mensaje.lastMessage = true;
                  enviadoUltimo=true;
              }
              else
                  mensaje.lastMessage = false;
  
              oos.writeObject(mensaje);
  
  
              if (mensaje.lastMessage)
                  break;
  
              mensaje = new ComConstants();
              mensaje.queryTerms = query;
  
              readed = bis.read(mensaje.fileContent);
          }
  
          if (enviadoUltimo==false)
          {
              mensaje.lastMessage=true;
              mensaje.okBytes=0;
              oos.writeObject(mensaje);
          }
  
          oos.close();
      } catch (Exception e)
      {
          e.printStackTrace();
      }
  }
  </code></pre>
  
  <p>And this is the error log:</p>
  
  <pre><code>Thread by Thread has Search Results
  java.io.StreamCorruptedException: invalid stream header: 20646520
  at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
  at java.io.ObjectInputStream.&lt;init&gt;(Unknown Source)
  at org.tockit.comunication.ServerThread.enviaFicheroMultiple(ServerThread.java:747)
  at org.tockit.comunication.ServerThread.run(ServerThread.java:129)
  at java.lang.Thread.run(Unknown Source)
  </code></pre>
  
  <p>Where at <code>org.tockit.comunication.ServerThread.enviaFicheroMultiple(ServerThread.java:747)</code> is this line <code>ObjectInputStream is = new ObjectInputStream(bs);</code> on the 1st code just after <code>while (!mensajeRecibido.lastMessage);</code></p>
  
  <p>Any ideas?</p>