javarmi与远程文件访问

javarmi与远程文件访问,java,rmi,Java,Rmi,我刚刚开始学习Java的RMI,我相信我理解这个过程,客户端发送方法请求和参数,服务器进行计算并返回结果 但是,服务器是否在本地执行方法中的所有操作 具体来说,如果在方法中读取文件,我认为这是由服务器执行的,对吗 如果是这种情况,该方法是否有任何方法可以专门从客户端访问资源(例如客户端的System.out?) 如果本地是指服务器(虚拟机)上,那么答案是肯定的 对 否,只能访问作为参数显式传递给远程方法的值。您只能传递可序列化的对象,而流通常不是 话虽如此,客户机也可以充当服务器,导出自己的远程

我刚刚开始学习Java的RMI,我相信我理解这个过程,客户端发送方法请求和参数,服务器进行计算并返回结果

但是,服务器是否在本地执行方法中的所有操作

具体来说,如果在方法中读取文件,我认为这是由服务器执行的,对吗

如果是这种情况,该方法是否有任何方法可以专门从客户端访问资源(例如客户端的System.out?)

  • 如果本地是指服务器(虚拟机)上,那么答案是肯定的
  • 否,只能访问作为参数显式传递给远程方法的值。您只能传递可序列化的对象,而流通常不是
  • 话虽如此,客户机也可以充当服务器,导出自己的远程对象,这些对象可以传递给(其他)服务器,然后服务器可以使用该远程对象回调客户机

  • 如果本地是指服务器(虚拟机)上,那么答案是肯定的
  • 否,只能访问作为参数显式传递给远程方法的值。您只能传递可序列化的对象,而流通常不是

  • 话虽如此,客户机也可以充当服务器,导出自己的远程对象,这些对象可以传递给(其他)服务器,然后服务器可以使用该远程对象回调客户机

    如果我理解你的问题,我会说是的,你的回答是正确的。根据定义,(远程)方法在服务器端运行。客户端只持有一个伪对象(代理或存根),该对象连接到服务器,传递参数并为您获取返回值

    想想运行在不同机器上的客户机和服务器,服务器无法了解客户机的资源,除非客户机本身充当服务器


    问候

    如果我理解你的问题,我会说是的,你的回答是正确的。根据定义,(远程)方法在服务器端运行。客户端只持有一个伪对象(代理或存根),该对象连接到服务器,传递参数并为您获取返回值

    想想运行在不同机器上的客户机和服务器,服务器无法了解客户机的资源,除非客户机本身充当服务器


    关于

    您可以使用它轻松地通过rmi传输数据。也就是说,我非常怀疑您是否希望使用System.out来实现这一点。

    您可以使用它轻松地通过rmi传输数据。也就是说,我非常怀疑您是否希望使用System.out.

    好的,谢谢:)想想看,如果我有一个RMI方法获取一个输出流,客户机给出System.out作为参数,服务器可以对客户机输出流执行写操作、println()等吗?@akd5446不,您不能传递任何输出流,因为大多数输出流是不可序列化的(请查看其Javadoc中的“所有实现的接口”部分)。这种方法的另一个问题是,参数传递只是单向的,即使可以传递流,客户端也看不到更改。我的建议是让你的方法返回一个
    字节[]
    或者仅仅是一个
    字符串
    ,你在服务器上写入它。好的,谢谢:)想想看,如果我有一个RMI方法获取一个输出流,客户端给出System.out作为参数,服务器可以执行写操作吗,println()是否在客户端输出流上设置了etc?@akd5446否,您不能传递任何输出流,因为大多数输出流都不可序列化(请查看其javadoc中的“所有实现的接口”部分)。这种方法的另一个问题是,参数传递只是单向的,即使可以传递流,客户端也看不到更改。我建议让您的方法返回一个
    字节[]
    ,或者只返回一个
    字符串
    ,您可以在服务器上写入该字符串。