用于计算机通信中的懒惰数据序列化的方法和系统的制作方法

文档序号:7710224阅读:225来源:国知局
专利名称:用于计算机通信中的懒惰数据序列化的方法和系统的制作方法
技术领域
本发明一般涉及一种用于计算机通信中的懒惰数据序列化(lazy dataserialization)的方法和系统,更具体地涉及计算机通信和分布式计算系统的领域。
背景技术
在现代软件开发的实践中,使用各种层、抽象和模型来设计用于分布式计算环境的软件。软件的这些层在通信中导致非常低效。一个具体示例是计算机对象当需要在计算机网络上传送至另一计算机时的序列化。为了所有这样的转换,对象被转换为网络格式用于传送。图1和2中示出了用于转换计算机对象以在网络上传送的当前技术。图1在流程图100中示出了计算机采取的为了在计算机网络上传送对象的步骤。在计算机系统中执行程序的经过期间,在步骤101进入过程(procedure)。在步骤103中,过程获取作为某些信息在计算机存储器内的表示的对象,并将该对象转换为规范格式。该规范格式可以是将所有元素翻译为大端(big-endian)格式;根据某些定义的模式(schema)将对象翻译为可扩展标记语言(XML)表示;或者将对象翻译为被协定为交换的标准手段的二进制格式。在步骤105中,过程建立至外部计算机的网络连接。可以向一个或多于一个的外部计算机建立网络连接。在步骤107中,传送对象。然后,发送过程在步骤109中结束。作为示例,内部Java对象的许多当前绑定使用XML作为使用简单对象访问协议 (SOAP)向远程方通信的方式。为了转换本地表示,它们可以定义新的转换器。下面摘录的代码示出了可以用于将本地表示“LocalFormat”转换为XML格式的软件包的典型示例。转换器工厂(converter factory)用作用于查找用于指定的格式的恰当转换器子例程的间接点,并且其是Java(和使用面向对象范型的其它语言)程序员通常使用的模式(pattern)。
public class SomeClass... {
public static Convert(Object obj) {
String name = obj.getClass().getName() ConverterFactory factory = new ConverterFactory(); Converter XML—converter = factory.newXMLConverter("name"); String converted—xml = XML—converter.convert(obj));
}
}上面的程序片段对应于图1的步骤103。可以使用不同的实施方式和不同的类名称。
在转换为以字符串(String)格式的规范XML表示之后,将经转换的信息发送至另一方。不同的软件可用于此类型的传送。可以通过使用Java中的套接字(socket)接口的传输,在Java中提供典型的示例。发送方将使用具有如下面所示的代码片段的例程。对new Socket (...)的调用对应于步骤105,而对Str. writeBytes (...)的调用对应于步骤107。
Public class SomeClass {
Public void send (String converted—xml, String host, int port) { Socket s = new Socket(host, port); DataOutputStream str = s.getOutputStream(); Str.writeBytes(convertedxml)
}如果远程地址正运行与本地服务器相同的环境,例如,具有相同的操作环境或中间件,则可能已经由更高效的序列化处理取代了向XML的转换。然而,当启动向XML的转换的调用时,不存在对象将被传送到哪个地址的指示。而且,不存在为了在网络上传送数据而正在进行转换的指示。可能已经完成了转换,以便将对象存储到文件中、打印出对象供人观看、或者将对象存储到数据库中。因此,在当前技术中,这样的优化是不可行的,因为当将对象转换为规范格式时,既不知道转换为规范格式的目的,也不知道规范格式的目的地。图2在流程图200中示出了在当前技术中由接收计算机使用的步骤。在图中201 中进入过程,并且在步骤203中,接收计算机建立与发送计算机的连接。在不同的实施方式中,建立网络连接的方法可不同。例如,一种方法可侦听套接字,另一种方法可连接到套接字,同时其它方法可使用在套接字抽象之上构建的某些类。在步骤205中,从网络连接接收对象。在步骤207中,将对象从规范格式转换为本地格式,其中,以规范格式在网络上传送该对象。接着,过程在步骤209中结束,并且接收计算机可以执行对所接收的对象的进一步处理。在许多情况下,例如,当应用正运行在使用管理程序的相同系统上时,或者当对象正被发送到运行相同硬件和软件环境的机器时,可以避开这样的转换。然而,由于软件栈的分层化,转换例程不知道对象的目的地,且不能容易地避开这样的转换。这种向网络格式的转换的一个示例是在使用因特网协议组(TCP/IP)网络传送格式的计算机通信中使用ntoh和hoton宏。宏hton用于转换诸如整数、浮点数或字符的数据类型,以将其从主机格式转换为网络格式(大端格式_如果需要)。当本地主机是小端 (Little Endian)型时,宏用于向网络格式转换。然而,如果本地和远程主机都是小端型, 则两端处的转换均可消除。当数据正被格式化用于传送时,在通信另一侧的主机的种类 (nature)是未知的,因此难以进行这样的优化。 这种向网络格式的转换的另一示例是在面向服务的架构和网络服务 (web-service)的情况中。在这样的通信中,客户端和服务器通常使用XML和SOAP通信。 网络格式是对保持在本地库中的对象的XML编码。当对象正被发送到具有与发送方类似的特性的通信方时,这样的转换可以不是必须的。然而,因为正被发送信息的通信方的身份是未知的,所以不可能容易地进行这样的优化。因此,存在开发这样的系统的需要,S卩,该系统可以延迟对象向网络格式的实际转换直到获知了远程通信方的身份和种类为止,并确定是否可以避开该转换
发明内容
考虑到传统方法和结构的前述和其它示例性问题、缺陷和缺点,本发明的示例性特征是提供一种在计算机系统之间传送信息的方法。所述方法包括在计算机的处理单元中确定在不将所述信息的本地格式转换为所述信息的规范格式的情况下,接收计算机系统是否可以接收所述信息;如果确定在不将所述本地格式转换为所述规范格式的情况下,所述接收计算机系统不能接收所述信息,则将所述本地格式转换为所述规范格式,并将所述信息传送至所述接收计算机系统;以及如果确定在不将所述本地格式转换为所述规范格式的情况下,所述接收计算机系统能够接收所述信息,则将所述信息传送至所述接收计算机系统。延迟将信息的本地格式转换为信息的规范格式。确定在不向所述规范格式转换的情况下所述接收计算机系统是否能够接收所述信息可以包括比较所述接收计算机系统的地址,或者确定所述接收计算机系统是否是运行在相同管理程序上的虚拟机。此外,延迟对信息的本地格式的转换包括将所述信息标记为需要序列化。本地格式可以是另一计算机系统在结构化语言(诸如XML)中的表示。而且,确定在不向所述规范格式转换的情况下所述接收计算机系统是否能够接收所述信息包括将接收机器的特性与发送机器的特性相比较。这些特性包括网络地址、机器制造商、机器类型以及机器名称中的至少一个。可以通过在面向对象的编程语言中重写 (override)函数定义来实施对转换所述本地格式的延迟。本发明的另一示例性实施例包括具有存储器和耦接到所述存储器的至少一个处理器的系统,并且该系统可操作来执行上述示例性方法。本发明的再一示例性实施例包括可编程存储介质,其有形地实施机器可读指令的程序,该指令可被数字处理设备执行来执行上述示例性方法。通过这些特征,本发明可以提供有益技术效果,诸如,提供不执行不必要的格式转换的软件模块,以及允许更高效的通信,其中,当可行时可以编写软件系统来避开这种转换的开销。


根据下面参照附图对本发明的示例性实施例的详细描述,将更好地理解前述和其它的示例目的、方面和优点,其中图1示出了在发送计算机处使用的用于将对象转换为规范格式并传输对象的步骤的相关技术流程图100 ;图2示出了在接收计算机处使用的用于转换从网络接收的对象的步骤的相关技术流程图200 ;图3示出了根据本发明的示例性方面的、在发送计算机处使用的用于将对象转换为规范格式并传输对象的步骤的流程图300 ;图4示出了根据本发明的另一示例性方面的、在发送计算机处使用的用于将对象转换为规范格式并传输对象的步骤的流程图400 ;图5示出了根据本发明的示例性方面的、在接收计算机处使用的用于转换从网络接收的对象的步骤的流程图500 ;图6示出了根据本发明的示例性方面的、在计算机系统之间传送信息的系统600 ;

图7示出了用于将本发明合并在其中的示例性硬件/信息处理系统700 ;以及图8示出了用于存储根据本发明的方法的程序的步骤的计算机可读存储介质 800 (例如,存储介质)。
具体实施例方式现在参照附图,更具体地参照图3-8,示出了根据本发明的系统和方法的示例性实施例。图3示出了根据本发明的示例性方面的、向接收计算机系统传送信息的方法(流程图300)。在步骤301中进入过程。在步骤303中,处理单元确定在不将信息的本地格式转换为信息的规范格式的情况下,接收计算机系统是否可以接收信息。如果确定在不将本地格式转换为规范格式的情况下,接收计算机系统不能接收信息,则在步骤305中,将本地格式转换为规范格式,并在步骤307中,将信息传送至接收计算机系统。如果确定在不将本地格式转换为规范格式的情况下,接收计算机系统能够接收信息,则在步骤307中,将信息传送至接收计算机系统。过程接着在步骤309中结束。图4示出了本发明的另一示例性实施例将采取的步骤的流程图400。在步骤401中进入过程。在步骤403中,过程要求将对象转换为可以被传送到网络上的规范格式。然而,该步骤简单地标记该对象需要被转换,而不是将对象转换为规范表
7J\ ο在面向对象范型中,可以实现此标记的一个方式是通过具有带有该标记标志的对象、以及指向要被转换为规范格式的原始对象的指针。在步骤405中,建立网络连接,如本领域的技术人员所公知的。在步骤407中,当对象需要被传送时,过程检查在不需要转换为规范格式的情况下,网络连接的远程点是否可以接受对象。在本发明的一个实施例中,该检查将涉及检查是否所有接收器都正作为虚拟机而运行在相同管理程序上。在本发明的另一实施例中,在具有列举具有相同内部格式的所有机器的地址的先前的安排的情况下,该检查将涉及检查是否所有接收器都具有满足某些准则的地址。而在本发明的另一实施例中,可以通过在建立网络连接期间具有初始交换而进行判定,其中,网络连接中涉及的各方协商它们将使用本地格式还是规范格式用于在网络上通^[曰ο如果步骤407中的判定指示不需要向规范格式转换,则在步骤411中按原样传送该对象。否则,在步骤411中传送该对象之前,在步骤409中将该对象转换为规范格式。接着,过程在步骤413中结束。
为了说明本发明的使用情形,下面描述在之前所述的示例的情况中将编写的软件代码。在本发明的一个实施例中,将如下所示编写步骤403中的代码。
public class SomeClass... {
public static Convert(Object obj) {
String name = obj.getClassQ.getNameQ ConverterFactory factory = new ConverterFa ctory(); Converter XML—converter = factory.newXMLConverter("name"); LazyString converted—xml = XML converter.lazy_convert(obj));
}
}发送信息的代码将如下(步骤405是调用new Socket (...),步骤407-411在过禾呈 toString. ForTransmission (...)中执行)
Public class SomeClass {
Public void send (LazyString converted—xml,
String host, int port) { Socket s = new Socket(host, port); DataOutputStream str = s.getOutputStream();
Str.writeBytes(converted_xml.toStringForTransmission(s)); }这里,LazyString(懒惰字符串)是所定义的String(字符串)的子类,从而可以推迟转换直至稍后。子例程toStringForTransmission检查套接字的地址,确定将此字符串转换为序列化的格式而不是标准XML版本是否安全,并随后创建恰当的字节序列用于序列化。在上面给出的示例中,编写了过程,从而其可能需要改变软件代码。然而,依赖于编程风格,在其它实施例中,可以在不改变软件代码的情况下提供此功能性。为了接收在此实施例中发送的信息,接收计算机可能需要以其处理所接收的分组的方式而进行附加的改变。接收计算机可能需要检查是否已经以接收机器的本地格式发送了对象。在图5中,在流程图500中示出了修改的接收处理。在步骤501中进入过程,并且在步骤503中,接收计算机建立与发送计算机的连接。在不同的实施方式中,建立网络连接的方法可不同。例如,一个方法可侦听套接字,另一个方法可连接到套接字,而其它方法可使用在套接字抽象之上构建的某些类。在步骤505 中,从网络连接接收对象。在步骤507中,过程检查对于在网络连接上接收的分组是否需要转换。
在步骤509中,将对象从规范格式转换为本地格式,其中,以该规范格式在网络上传送该对象。过程接着在步骤511中结束,并且接收计算机可以对所接收的对象进行进一步处理。在本发明的一个示例性实施例中,该检查将涉及检查对象的发送者是否正作为虚拟机而运行在相同的管理程序上。在本发明的另一示例性实施例中,在具有列举所有具有相同内部格式的机器的地址的先前安排的情况下,检查将涉及检查发送者是否具有满足某些准则的地址。而在本发明的另一示例性实施例中,可以通过在网络连接的建立期间具有初始交换而进行判定,其中,在网络连接中涉及的各方协商它们将使用本地格式还是规范格式用于在网络上的通信。如果在步骤507中的判定指示不需要转换为规范格式,则过程在步骤511中结束。 否则,过程在步骤511中结束之前,在步骤509中执行从规范格式向本地格式的转换。图6示出了根据本发明的示例性方面的、用于将信息传送至接收计算机系统的系统 600。该系统包括确定装置601,用于确定在不将信息的本地格式转换为信息的规范格式的情况下,接收计算机系统是否可以接收信息;转换装置603,用于在确定装置确定在不将本地格式转换为规范格式的情况下,接收计算机系统不能接收信息的情况下,将本地格式转换为规范格式;以及传送装置605,用于将信息从转换装置传送至接收计算机系统。如果确定装置601确定在不将本地格式转换为规范格式的情况下,接收计算机系统可以接收信息,则确定装置601将该信息传送至传送装置605。图7示出了用于与本发明一起使用的信息处理/计算机系统的典型硬件结构,并且其优选地具有至少一个处理器或中央处理单元(CPU) 710。 CPU 710经由系统总线712互连到随机存取存储器(RAM) 714、只读存储器 (ROM) 716、输入/输出(I/O)适配器718 (用于将诸如盘单元721和磁带驱动器740的外围装置连接至总线712)、用户接口适配器722 (用于将键盘724、鼠标726、扬声器728、麦克风 732和/或其它用户接口装置连接至总线712)、通信适配器734 (用于将信息处理系统连接至数据处理网络、因特网、内部网、个人区域网络(PAN)等)、读取器/扫描仪741、以及显示适配器736 (用于将总线712连接至显示装置738和/或打印机739)。除了上述硬件/软件环境之外,本发明的不同方面还包括用于执行上述方法的计算机实施的方法。作为示例,可以在上面讨论的具体环境中实施此方法。例如,可以通过操作计算机(如由数字数据处理设备实现的)来实施这样的方法, 以执行机器可读指令的序列。这些指令可以驻留在各种类型的信号承载介质中。例如,此信号承载介质可以包括包含在CPU 710内的RAM,例如由快速访问存储器代表。替代地,指令可以包含在可由CPU 710直接或间接访问的另一信号承载介质中,诸如磁数据存储磁盘800 (图8)。无论包含在磁盘800、计算机/CPU 710中或其它地方,指令都可以存储在各种机器可读数据存储介质上,诸如DASD存储器(例如,传统的“硬盘驱动器”或RAID阵列)、磁带、电只读存储器(例如,R0M、EPR0M或EEPR0M)、光存储装置(例如,CD ROM、WORM、DVD、数字光学磁带等)、纸质“打孔”卡。在本发明的说明性实施例中,机器可读指令可以包括从诸如“C”等的语言编译的软件对象代码。
图8示出了信号承载介质800 (例如,存储介质)和⑶ROM 802,用于存储根据本发明的方法的程序的步骤。应该注意,本发明的其它目的、特征和方面将在整个公开中变得明显。在不偏离这里所公开的以及所附权利要求中主张的本发明的主旨和范围的情况下可以进行修改。 此外,应该注意,所公开和/或主张的元素、主题和/或条目的任意组合可落入前述修改之中。
权利要求
1.一种用于向接收计算机系统传送信息的方法,所述方法包括在计算机的处理单元中确定在不将所述信息的本地格式转换为所述信息的规范格式的情况下,所述接收计算机系统是否可以接收所述信息;如果确定在不将所述本地格式转换为所述规范格式的情况下,所述接收计算机系统不能接收所述信息,则将所述本地格式转换为所述规范格式,并将所述信息传送至所述接收计算机系统;以及如果确定在不将所述本地格式转换为所述规范格式的情况下,所述接收计算机系统能够接收所述信息,则将所述信息传送至所述接收计算机系统。
2.如权利要求1所述的方法,其中,延迟将信息的所述本地格式转换为信息的所述规范格式。
3.如权利要求2所述的方法,其中,对信息的所述本地格式的延迟转换包括将所述信息标记为需要序列化。
4.如权利要求2所述的方法,其中,通过在面向对象编程语言中重写函数定义来实施对所述本地格式的延迟转换。
5.如权利要求1所述的方法,其中,所述确定在不将所述本地格式转换为所述规范格式的情况下所述接收计算机系统是否能够接收所述信息包括比较所述接收计算机系统的地址。
6.如权利要求1所述的方法,其中,所述确定在不将所述本地格式转换为所述规范格式的情况下所述接收计算机系统是否能够接收所述信息包括确定接收计算机系统是否包括运行在相同管理程序上的虚拟机。
7.如权利要求1所述的方法,其中,所述本地格式包括另一计算机系统在结构化语言中的表示。
8.如权利要求1所述的方法,其中,所述确定在不将所述本地格式转换为所述规范格式的情况下所述接收计算机系统是否能够接收所述信息包括将所述接收计算机系统的特性与发送计算机系统的特性相比较,所述特性包括网络地址、机器制造商、机器类型以及机器名称中的至少一个。
9.一种用于将信息传送至接收计算机系统的系统,所述系统包括确定装置,用于确定在不将所述信息的本地格式转换为所述信息的规范格式的情况下,所述接收计算机系统是否可以接收所述信息;转换装置,用于在所述确定装置确定在不将所述本地格式转换为所述规范格式的情况下,所述接收计算机系统不能接收所述信息的情况下,将所述本地格式转换为所述规范格式;以及传送装置,用于将所述信息从所述转换装置传送至所述接收计算机系统,其中,如果所述确定装置确定在不将所述本地格式转换为所述规范格式的情况下,所述接收计算机系统能够接收所述信息,则所述确定装置将所述信息传送至所述传送装置。
10.如权利要求9所述的系统,其中,所述转换装置延迟转换信息的所述本地格式。
11.如权利要求10所述的系统,其中,对信息的所述本地格式的延迟转换包括将所述信息标记为需要序列化。
12.如权利要求10所述的系统,其中,通过在面向对象编程语言中重写函数定义来实施所述延迟转换所述本地格式。
13.如权利要球9所述的系统,其中,所述确定装置比较所述接收计算机系统的地址。
14.如权利要求9所述的系统,其中,所述确定装置确定所述接收计算机系统是否包括运行在相同管理程序上的虚拟机。
15.如权利要求9所述的系统,其中,所述确定装置将所述接收计算机系统的特性与发送计算机系统的特性相比较,所述特性包括网络地址、机器制造商、机器类型以及机器名称中的至少一个。
全文摘要
本发明涉及一种用于计算机通信中的懒惰数据序列化的方法和系统。一种用于向接收计算机系统传送信息的方法和系统,所述方法包括在计算机的处理单元中确定在不将信息的本地格式转换为信息的规范格式的情况下,接收计算机系统是否可以接收信息;如果确定在不将本地格式转换为规范格式的情况下,接收计算机系统不能接收信息,则将本地格式转换为规范格式,并将信息传送至接收计算机系统;以及如果确定在不将本地格式转换为规范格式的情况下,接收计算机系统能够接收信息,则将信息传送至接收计算机系统。
文档编号H04L29/06GK102314406SQ201110180490
公开日2012年1月11日 申请日期2011年6月30日 优先权日2010年6月30日
发明者丹尼什.C.沃玛, 休伯特斯.弗兰克, 戴维.P.奥尔谢夫斯基, 查尔斯.P.赖特, 约翰.M.特雷西, 道格拉斯.M.弗雷穆斯 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1