Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无效的流标头-Java中的套接字传输_Java_Sockets_Serialization_Deserialization - Fatal编程技术网

无效的流标头-Java中的套接字传输

无效的流标头-Java中的套接字传输,java,sockets,serialization,deserialization,Java,Sockets,Serialization,Deserialization,我还有一个问题 这是我客户的一部分: Socket socket = new Socket("127.0.0.1", 3000); OutputStream out = socket.getOutputStream(); ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutput oo = null; try {

我还有一个问题

这是我客户的一部分:

Socket socket = new Socket("127.0.0.1", 3000);
            OutputStream out = socket.getOutputStream();

            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            ObjectOutput oo = null;
            try {
              oo = new ObjectOutputStream(bos);   
              oo.writeObject(mp3dataStrings);
              byte[] serializedMP3 = bos.toByteArray();
              out.write(serializedMP3);
                out.flush();
            } finally {
              oo.close();
              bos.close();
            }   
这是我的服务器的一部分:

ServerSocket clientConnect = new ServerSocket(port);
        System.out.println("SimpleServer running on port" + port);
        Socket clientSock = clientConnect.accept();
        InputStream is = clientSock.getInputStream();

        byte[] buffer = new byte[1024];

        for (int i = 0; i < buffer.length; i++) {
          int b = is.read();
          buffer[i] = (byte) b;
          if (b == -1 | b == 0) break;
        }
        ObjectInputStream stream = new ObjectInputStream(new ByteArrayInputStream(buffer));
        String[][] songs = (String[][]) stream.readObject();
        stream.close();
当我向我的对象发送字符串[]时,我得到异常无效流头:ACED0000

我找不到这意味着什么,我必须做什么

问候
亚历克斯

你把事情弄得比你需要的复杂得多

Socket socket = new Socket("127.0.0.1", 3000);
try {
  ObjectOutputStream oo = new ObjectOutputStream(socket.getOutputStream());   
  oo.writeObject(mp3dataStrings);
  oo.close();
} finally {
  socket.close();
}   


你把事情弄得比你需要的复杂得多

Socket socket = new Socket("127.0.0.1", 3000);
try {
  ObjectOutputStream oo = new ObjectOutputStream(socket.getOutputStream());   
  oo.writeObject(mp3dataStrings);
  oo.close();
} finally {
  socket.close();
}   


我同意Peter Lawrey的回答,但是原始代码中的问题源于字节缓冲区填充代码中的退出条件

    byte[] buffer = new byte[1024];

    for (int i = 0; i < buffer.length; i++) {
      int b = is.read();
      // THIS ARE PROBLEM LINES
      buffer[i] = (byte) b;
      if (b == -1 | b == 0) break;
    }
    ObjectInputStream stream = 
      new ObjectInputStream(new ByteArrayInputStream(buffer));

我同意Peter Lawrey的回答,但是原始代码中的问题源于字节缓冲区填充代码中的退出条件

    byte[] buffer = new byte[1024];

    for (int i = 0; i < buffer.length; i++) {
      int b = is.read();
      // THIS ARE PROBLEM LINES
      buffer[i] = (byte) b;
      if (b == -1 | b == 0) break;
    }
    ObjectInputStream stream = 
      new ObjectInputStream(new ByteArrayInputStream(buffer));

为什么要将输入流复制到缓冲区,然后将该缓冲区传递给ByteArrayInputStream?@benjarobin为什么会出现问题?听起来像是一个提示。为什么要将输入流复制到缓冲区,然后将此缓冲区传递到ByteArrayInputStream?@benjarobin为什么会有问题?听起来像是个暗示。非常感谢!我将在将来应用它。新年快乐,非常感谢!我将在将来应用它。新年快乐我正在使用这个解决方案,我在服务器上有一个错误。如果服务器不是我的计算机,则获取的流头套接字无效。有什么线索吗?@FranzéJr.很可能服务器没有写入对象输出流。服务器使用什么有线协议?它正在工作。可能是清洁问题。谢谢你们。我正在使用这个解决方案,但我在服务器上有一个错误。如果服务器不是我的计算机,则获取的流头套接字无效。有什么线索吗?@FranzéJr.很可能服务器没有写入对象输出流。服务器使用什么有线协议?它正在工作。可能是清洁问题。谢谢你们。