要搞这个原因是:
RedDwarf平台在服务端手法数据都是基于字节数组类型的,这样就需要做一个byte数组到基本数据类型的转换。
用到的技术主要有MINA和AMF,先来介绍一下AMF:
Action Message Format (AMF) is a binary format used to serialize ActionScript objects. It is used primarily to exchange data between an Adobe Flash application and a remote service, usually over the internet.
Typical usage from Adobe Flash Player, consists of an ActionScript program which:[citation needed]
- Connects to a specific "gateway" URL on a web server
- Accesses the service which handles AMF communication
- Calls a method on the service, mentioning a "callback" method
- Arguments passed are serialized to AMF and deserialized at the receiving end
- The service processes the input, and optionally returns data via AMF
- The callback method is invoked by the platform, and returned data is passed
the pragraph below is used to describe the new characteristic which is about some new type in the
ActionScript 3.0. and this content is come from the amf3_spec_121207.pdf
ActionScript 3.0 introduced a new type to support the manipulation of raw data in the form of an
Array of bytes, namely flash.utils.ByteArray. To assist with ActionScript Object serialization and
copying, ByteArray implements flash.utils.IDataInput and flash.utils.IDataOutput. These interfaces
specify utility methods that help write common types to byte streams. Two methods of interest are
IDataOutput.writeObject and IDataInput.readObject. These methods encode objects using AMF.
The version of AMF used to encode object data is controlled by the ByteArray.objectEncoding method, which can be set to either AMF 3 or AMF 0. An enumeration type, flash.net.ObjectEncoding, holds the constants for the versions of AMF - ObjectEncoding.AMF0 and ObjectEncoding.AMF3 respectively.
Note that ByteArray.writeObject uses one version of AMF to encode the entire object. Unlike
NetConnection, ByteArray does not start out in AMF 0 and switch to AMF 3 (with the objectEncoding
property set to AMF 3). Also note that ByteArray uses a new set of implicit reference tables for objects,
object traits and strings for each readObject and writeObject call.
根据pdf所介绍,flash.utils.ByteArray 用来协助实现Action Script 对象的序列化和拷贝。该类实现了flash.utils.IDataInput 和flash.utils.IDataOutput接口。实现了它们的writeObject和readObject方法。这两个方法使用的对象就是使用AMF0或者是AMF3进行编码的。
And now the case is that i should convert byte array to the xml type data. I can use the MINA 's
IoBuffer. org.apache.mina.core.buffer.IoBuffer, it has a function:
public static IoBuffer wrap(byte[] byteArray). And use it you can make the byte array which received
from client . After that, use the IoBuffer.asInputStream() convert the it to inputstream . And now you can
use openAMF's XMLUtils.convertToDOM(inputStream). and this function return a DOM which is one type
of org.w3c.dom. It is like that :org.w3c.dom.Document dom = XMLUtils.convertToDOM(inputstream);
也就是说,用MINA的IoBuffer.wrap(Byte []: org0)可以将从客户端过来的byte数组类型的数值压缩到IoBuffer的ByteBuffer 中,然后利用IoBuffer的实例方法: as InputStream()将byteBuffer 转换为输入流。最后利用openAMF的XMLUtils.convertToDOM(inputStream)方法将输入流转换为DOM树。这样就完成了转换。
利用AMF的好处在于RedDwarf的数据传递时利用Byte数组传递的。但是按照我这样的搞法,最后还是在用xml呀,所以这一点比较纠结,现在先这样吧,至少这样是可以实现的,就行而且基本上这些数据转换也摸了一遍了,下次就会好很多了,只是把xml换为可能json等这些吧。
分享到:
相关推荐
2017年8月更新VisualSVN-Server-3.6.4-x64位服务端
基于SpringBoot 和 Nuxt 的服务端渲染博客系统.zip正版个人毕设-基于SpringBoot 和 Nuxt 的服务端渲染博客系统.zip正版个人毕设-基于SpringBoot 和 Nuxt 的服务端渲染博客系统.zip正版个人毕设-基于SpringBoot 和 ...
"易语言服务端客户端互换收发数据"的主题聚焦于使用易语言实现服务器与客户端之间的数据交换。易语言是一种以中文为编程语言的编程环境,旨在降低编程难度,让更多人能够参与到程序开发中。以下是关于这个主题的详细...
3. **处理响应**:客户端接收到服务端的响应后,根据预期的消息类型解析响应数据,执行相应的业务逻辑。 4. **错误处理**:客户端应该包含适当的错误处理机制,如处理网络异常、超时或服务端返回的错误状态码。 5....
Java开发案例-springboot-12-集成socket.io服务端和客户端-源代码+文档.rar Java开发案例-springboot-12-集成socket.io服务端和客户端-源代码+文档.rar Java开发案例-springboot-12-集成socket.io服务端和客户端-源...
综上所述,Android与服务端通过TCP进行通讯是通过Socket对象实现的,包括创建Socket、打开输入/输出流、发送和接收数据以及关闭连接等步骤。这个过程涉及到TCP/IP协议的基本原理和Android的网络权限管理。通过封装和...
Linux运维-运维课程MP4频-06容器编排(k8s)-day01-11-9-06-docker客户端与服务端分
本实例主要关注C#如何实现TCP/IP服务端,帮助开发者理解如何创建可靠的网络连接并进行数据交换。 TCP(传输控制协议)与IP(互联网协议)构成了互联网的基础,它们共同工作以确保数据在网络中的可靠传输。TCP提供...
在AS3中,Socket类提供了一个与服务器进行双向通信的通道,这在创建实时互动的Flash应用时非常有用,如在线游戏、实时聊天或数据传输等。 标题"(AS3)socket+客户端与服务端+实例"指出我们将讨论如何使用AS3的...
在发送复杂数据时,可能需要先将数据序列化为字节流。 描述中提到的“十六进制发送”和“十六进制接收”是处理二进制数据的一种常见方式。在C#中,我们可以使用`BitConverter`类将数字转换为十六进制字符串,或者将...
直接可以对cas-server项目进行打不,部署到tomcat,即可使用,记得修改cas-server的数据库连接地址哦 单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目cas-server 单点登录服务端项目...
在Android应用开发中,网络交互是必不可少的一部分,尤其是在构建需要从服务器获取或发送数据的应用时。本文档将探讨如何在Android客户端实现从服务端请求资源,以获取如文本、图片或音频文件等不同类型的文件。这里...
从文本控件中获得Cstring类型的数据,与想发送的目标客户端昵称根据之前的约定进行组合,然后转换为TCHAR的数据,再发送到所有的客户端。 四、 客户端单击“断开服务器”按钮后的操作 关闭套接字,此时,服务端将会...
数据类型与转换** `dataType`参数指定期望的服务器响应类型,例如: - **'json'**:JSON对象,jQuery会自动将数据转换为JavaScript对象。 - **'html'**:HTML字符串。 - **'text'**:纯文本。 - **'xml'**:XML...
最新版SVN服务端,Setup-Subversion-1.7.4(SVN服务端).msi
内网穿透proxy-server-0.1_ZW87MY服务端开箱即用
在本节"057集-Android客户端与服务端交互-服务端代码"的视频教程中,我们将深入探讨Android应用程序如何与服务端进行有效且安全的通信,这对于开发任何涉及网络功能的Android应用来说都是至关重要的。这个教程针对的...
本教程将深入讲解如何利用AIDL来实现客户端向服务端传递基本类型的数据。 首先,理解AIDL的基本概念。AIDL就像一种接口定义语言,它允许我们定义一个接口,这个接口可以被服务端实现,客户端通过调用这个接口来与...
IEC60870-5-104规约是一种国际标准,主要应用于电力系统自动化设备间的通信,尤其在远程终端单元(RTU)、保护继电器和其他智能电子设备(IED)之间的数据交换。该规约是基于TCP/IP协议栈构建的,提供了高效、可靠的...