C++ 订单 —> 接口编码 —> 网络 —> 接口解码 —> Java 订单
还可以更广泛一些,比如android调用c接口,只用一个jni接口来建立通道,其它所有接口都通过这个通道来传数据相互调用,再也不用写很多个接口了。
如何实现远程函数的调用?A语言—> 数据封解包 —> 通道 —> 数据封解包 —> B语言
发送结构:包名,函数名,方法,参数,返回值。
接收处理:反射调用,返回返回值。
二、成熟方案:Protobuf、XML、Json等
原始数据结构 —> 序列化(转为字节流) —> 网络 —> 反序列化(逆运算) —> 特定语言的数据结构
序列化将特定语言的数据结构转换为字节流,反序列化是将字节流转换回特定语言的数据结构的逆运算。
三、示例:Json序列化和反序列化using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.script.Serialization;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
//序列化操作
JavascriptSerializer jss = new JavascriptSerializer();
var json = new { name = "chenhao", age = 23 };
string str = jss.Serialize(json);
Console.WriteLine(str);
//反序列化操作
Person person = jss.Deserialize(str);
Console.WriteLine(person.name);
Console.ReadKey();
}
}
[Serializable]
public class Person
{
public string name { get; set; }
public int age { get; set; }
}
}
示例2: 使用Json.NET类库
class Program
{
static void Main(string[] args)
{
//序列化操作
var json = new { user = new { name = "fxhl", age = 23 }};
string jsonData = JsonConvert.SerializeObject(json);
Console.WriteLine(jsonData);
//反序列化操作方法一
Person p1= JsonConvert.DeserializeObject(jsonData);
Console.WriteLine(p1.user.name);
//反序列化操作方法二
string json2 = "[{"user":{"name":"fxhl","age":23}}]";
List listp2= JsonConvert.DeserializeObject>(json2);
Console.WriteLine(listp2[0].user.name);
Console.ReadKey();
}
}
public class Person
{
public Person user { get; set; }
public string name { get; set; }
public int age { get; set; }
}
原文:Json的序列化和反序列化 - 风雪幻林 - 博客园
三、示例:XML序列化和反序列化略
四、示例:protobuf 1.编写.proto文件 2.编译生成java文件 或其它语言 3.使用


