JAVA RMI 文档中文(二)

2024-05-01 00:58
文章标签 java 文档 中文 rmi

本文主要是介绍JAVA RMI 文档中文(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2.6 远端方法调用时的参数传递

一个远端对象只要可以序列化就可以是方法参数或是返回值。这就包括了基础对象、远端对象和实现了java.io.Serializable的非远端对象。更多关于如何序列化类的信息科一参考 “Java Object Serialization Specification”。这些参数或者返回值不是本地的,它们是通过RMI系统动态下载的。更多细节查看Dynamic Class Loading

2.6.1 传递非远端对象

一个非远端对象,无论是作为参数还是返回值,它都是通过复制来传递的,也就是通过java的序列化机制序列化后得到的。

所以,在方法调用过程中,当一个远端对象作为参数或者返回值被传递时,这个非远端对象的内容会在方法调用前被复制。

当调用远端方法返回一个非远端对象时,本地虚拟机就会创建一个新的对象。

2.6.2 传递远端对象

当传递一个远端对象时,实际传递的是这个对象的存根(stub)。
没有暴露的远端对象不会被存根实例替代。远端对象只有实现了远端接口才可以作为参数被传递。

2.6.3 引用的完整性(Referential Integrity)

如果一个对象的两个引用作为一个远端方法的参数从一个虚拟机传递到另一个虚拟机,那么这些引用在发送对象的虚拟机中指向的是同一个对象,它们在接收对象的虚拟机中指向的是同一个对象的副本,RMI系统会在对象传递过程中保证引用的完整性。

2.6.4 类注释(Class Annotation)

当一个对象通过方法调用,从一个虚拟机传递到另一个虚拟机时,RMI系统会通过URL来标识这个类,以便可以在接收端加载这个类。这个要求保证类会按需下载。
(这里翻译的感觉有点问题,下面是原文)

When an object is sent from one JVM to another in a remote method call, the RMI system annotates the class descriptor in the call stream with information (the URL) of the class so that the class can be loaded at the receiver. It is a requirement that classes be downloaded on demand during remote method invocation.

2.6.5 参数传递

在RMI调用中参数被写到流中,该流是java.io.ObjectOutputStream的子类,这样是为了可以将参数序列化到远端调用虚拟机中。ObjectOutputStream子类会重写replaceObject方法,该方法用每一个暴露的远端对象所对应的存根实例来替换他们。参数这些对象是通过ObjectOutputStreamwriteObject方法来写入流中的。ObjectOutputStream会为每一个通过writeObject方法写入流的对象调用replaceObject方法(包括写入对象所引用的对象)。replaceObject方法返回结果如下:
1、如果这个对象实现了java.rmi.Remote而且这个对象在RMI运行时被导出,那么该方法返回这个对象的存根实例。如果这个对象实现了java.rmi.Remote,但是没有在RMI运行时被导出,那么replaceObject方法返回该对象本身。对于远端对象的存根,可以通过调用java.rmi.server.RemoteObjecttoStub方法获得。
2、如果这个对象不是一个java.rmi.Remote的实例,那么会简单返回该对象。

RMI中ObjectOutputStream的子类也会实现annotateClass方法,该类会通过远端类的位置来对类进行解释说明,以便该类可以在接收端被下载。

因为参数写入是通过一个单独的ObjectOutputStream,所以同一个对象的引用在接收端会指向同一个对象的副本。在接收端,参数通过一个单独的ObjectInputStream读出来。

ObjectOutputStream的其他任何写对象的行为(ObjectInputStream的读取对象和它类似)都是在参数传递中维护的。比如说,在写对象是会调用writeReplace方法,在读对象的时候回调用readResolve方法,这些方法都是由RMI参数的编排或者反编排流提供的。

返回值和异常的传递和上面讲的参数传递类似。

这篇关于JAVA RMI 文档中文(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/950346

相关文章

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

Java操作Word文档的全面指南

《Java操作Word文档的全面指南》在Java开发中,操作Word文档是常见的业务需求,广泛应用于合同生成、报表输出、通知发布、法律文书生成、病历模板填写等场景,本文将全面介绍Java操作Word文... 目录简介段落页头与页脚页码表格图片批注文本框目录图表简介Word编程最重要的类是org.apach

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

java中反射Reflection的4个作用详解

《java中反射Reflection的4个作用详解》反射Reflection是Java等编程语言中的一个重要特性,它允许程序在运行时进行自我检查和对内部成员(如字段、方法、类等)的操作,本文将详细介绍... 目录作用1、在运行时判断任意一个对象所属的类作用2、在运行时构造任意一个类的对象作用3、在运行时判断

java如何解压zip压缩包

《java如何解压zip压缩包》:本文主要介绍java如何解压zip压缩包问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解压zip压缩包实例代码结果如下总结java解压zip压缩包坐在旁边的小伙伴问我怎么用 java 将服务器上的压缩文件解压出来,

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

Spring WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注