Java 从InputStream到Spring集成的对象转换

Java 从InputStream到Spring集成的对象转换,java,tcp,deserialization,spring-integration,tcpserver,Java,Tcp,Deserialization,Spring Integration,Tcpserver,由于客户机-服务器应用程序中的序列化,我正在尝试通过TCP发送对象。TCP客户端是在android系统上编写的,我使用ObjectOutputStream发送一个对象。TCP服务器是用spring集成编写的,我尝试使用反序列化器读取这个对象。大概是这样的: <int-ip:tcp-connection-factory id="hosServer" serializer="connectionSerializeDeserialize" deserializer="connec

由于客户机-服务器应用程序中的序列化,我正在尝试通过TCP发送对象。TCP客户端是在android系统上编写的,我使用ObjectOutputStream发送一个对象。TCP服务器是用spring集成编写的,我尝试使用反序列化器读取这个对象。大概是这样的:

<int-ip:tcp-connection-factory id="hosServer"
    serializer="connectionSerializeDeserialize"
    deserializer="connectionSerializeDeserialize" ..... >

在实现序列化器和反序列化器接口的类中,我从InputSream创建ObjectInputStream,InputSream是反序列化器方法中的参数。在我再次尝试连接到服务器时,它工作正常。然后,在通过readObject()方法读取对象表单ObjectInputStream时,我接收到EOFEException

公共类CommandConverter实现序列化器、反序列化器{
私有ObjectInputStream ois=null;
私有ObjectOutputStream oos=null;
private CommandBuilder CommandBuilder=new CommandBuilder();
公共命令反序列化(InputStream InputStream)引发IOException{
如果(ois==null)
ois=新的ObjectInputStream(inputStream);
命令cmd=null;
试一试{
cmd=(命令)ois.readObject();
}catch(classnotfounde异常){
setCommandBuilder(新的ImproperCommandBuilder());
commandBuilder.createCommand();
cmd=commandBuilder.getCommand();
}捕获(InvalidClassException e){
setCommandBuilder(新的ImproperCommandBuilder());
commandBuilder.createCommand();
cmd=commandBuilder.getCommand();
}
返回cmd;
}

在spring integration中,通过TCP发送对象的最佳方法是什么?

序列化器和反序列化器的实现必须是线程安全的。实现这一点的最简单方法是使实现无状态

因为你的类中有这些属性,它们在不同的调用之间共享。这种状态会使行为变得不可预测

ObjectInputStream
ObjectOutputStream
不是为共享状态而设计的

因此,您必须在调用
反序列化()
时始终创建
ObjectInputStream

ObjectInputStream ois = new ObjectInputStream(inputStream);
等等

ObjectInputStream ois = new ObjectInputStream(inputStream);