java.io.NotSerializableException:net.sourceforge.jtds.util.BlobBuffer$BlobInputStream

java.io.NotSerializableException:net.sourceforge.jtds.util.BlobBuffer$BlobInputStream,java,sql-server,rmi,jtds,Java,Sql Server,Rmi,Jtds,我在服务器上有一个数据库,要和他连接,请使用RMI。我在RMI服务器中创建了以下方法: public InputStream getImageById(int id) { try { String sql = "SELECT photo FROM Product WHERE id = ?"; PreparedStatement ps = SQLConnection.getConnection().prepareStatement(s

我在服务器上有一个数据库,要和他连接,请使用RMI。我在RMI服务器中创建了以下方法:

public InputStream getImageById(int id) {
        try {
            String sql = "SELECT photo FROM Product WHERE id = ?";
            PreparedStatement ps = SQLConnection.getConnection().prepareStatement(sql);
            ps.setInt(1, id);
            ResultSet rs = ps.executeQuery();
            while(rs.next()) {
                return rs.getBinaryStream("photo");
            }
            Log.message("Retonada imagem (ID: " + id + ")");
        } catch (SQLException e) {
            Log.message("Ocorreu um erro. (getImageById) " + e.getMessage());
        }
        return null;
    }
但是当调用下面发生的错误时,有人能告诉我是什么吗

SEVERE: null
java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
    java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: net.sourceforge.jtds.util.BlobBuffer$BlobInputStream
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:191)
    at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:194)
    at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:148)
    at com.sun.proxy.$Proxy0.getImageById(Unknown Source)
    at model.teste.main(teste.java:22)
Caused by: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: net.sourceforge.jtds.util.BlobBuffer$BlobInputStream
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1352)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
    at sun.rmi.server.UnicastRef.unmarshalValue(UnicastRef.java:324)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:173)
    ... 4 more
Caused by: java.io.NotSerializableException: net.sourceforge.jtds.util.BlobBuffer$BlobInputStream
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1181)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
    at sun.rmi.server.UnicastRef.marshalValue(UnicastRef.java:292)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:332)
    at sun.rmi.transport.Transport$1.run(Transport.java:177)
    at sun.rmi.transport.Transport$1.run(Transport.java:174)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724

您可能试图将
BlobBuffer.BlobInputStream
作为RMI调用的参数或结果传递

我怀疑它实际上是由
rs.getBinaryStream(“photo”)
返回的对象,它不太可能是
可序列化的


通过RMI传递任何类型的
对象都不可能在没有大量工作的情况下工作。更好的方法(在本例中)是将blob作为
字节[]
提取到内存中,并通过RMI返回。

是的,因此我应该在JTD类中实现可序列化。但是我为RMI返回了一个字节数组。谢谢