本文为原创,转载请注明:http://www.cnblogs.com/gistao/

Background

xml,json,protobuf都是格式化手段,喜欢哪个,会用哪个,该用哪个,用哪个?

随便提一下facebook的thrift,也提供了序列化/反序列化功能,支持语言众多,rpc场景被大量采用,但性能相比protobuf还是弱一些,这是google的benchmarking。

XML

  • 可读可编辑。
  • 格式描述非常详细/冗余。
  • 不需要schema也可以解析。
  • 使用者众多,支持工具也众多,完全不用担心成孤岛。

Json

  • 可读可编辑,但是较长的json没有xml的一目了然。
  • 相比较xml,json更简介,解析也更快
  • 也不需要schema就可以解析。
  • 不需要担心工具问题,应用较广。

Protobuf

  • 二进制格式,所以没有可读性。不过google开发有wireshark插件以便定位问题。
  • 解析需要schema(.proto)。
  • 速度异常的快,google的对外说法是:相比xml,are 20 to 100 times faster。
  • 使用非常简单,可自动生成访问数据的类。
  • 仅支持c++,java,python。不过很多语言自己写了实现,比如php-protobuf

Final

个人而言,如果我的服务对象是浏览器,或者我提供了公用api,我会使用json。而服务内部之间的api会使用protobuf。

xml json protobuf的更多相关文章

  1. 三种通用应用层协议protobuf、thrift、avro对比,完爆xml,json,http

    原文: https://www.douban.com/note/523340109/ Google protobuf: 优点  二进制消息,性能好/效率高(空间和时间效率都很不错)     proto ...

  2. 金蝶随手记团队分享:还在用JSON? Protobuf让数据传输更省更快(实战篇)

    本文作者:丁同舟,来自金蝶随手记技术团队. 1.前言 本文接上篇<金蝶随手记团队分享:还在用JSON? Protobuf让数据传输更省更快(原理篇)>,以iOS端的Objective-C代 ...

  3. Xml,Json,Hessian,Protocol Buffers序列化对比

    简介 这篇博客主要对Xml,Json,Hessian,Protocol Buffers的序列化和反序列化性能进行对比,Xml和Json的基本概念就不说了. Hessian:Hessian是一个轻量级的 ...

  4. iOS开发笔记3:XML/JSON数据解析

    这篇主要总结在iOS开发中XML/JSON数据解析过程用到的方法.XML数据解析主要使用SAX方式的NSXMLParser以及DOM方式的GDataXML,JSON数据解析主要使用NSJSONSeri ...

  5. Silverlight项目笔记7:xml/json数据解析、TreeView、引用类型与数据绑定错误、图片加载、虚拟目录设置、silverlight安全机制引发的问题、WebClient缓存问题

    1.xml/json数据解析 (1)xml数据解析 使用WebClient获取数据,获取到的数据实例化为一个XDocument,使用XDocument的Descendants(XName)方法获得对应 ...

  6. [WEB API] CLIENT 指定请求及回应格式(XML/JSON)

    [Web API] Client 指定请求及响应格式(xml/json) Web API 支持的格式请参考 http://www.asp.net/web-api/overview/formats-an ...

  7. windows phone8.1:Xml,Json序列化和反序列化

    原文:windows phone8.1:Xml,Json序列化和反序列化 小梦本例主要实现以下四点内容: 将Car对象序列化为xml 将Car对象序列化为Json 将xml反序列化为Car对象 将js ...

  8. iOS基础 - XML & JSON

    一.HTML & XML HTML 是用来描述网页的一种语言 HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记 ...

  9. php中 xml json 数组 之间相互转换

    php中 xml json  数组 之间相互转换 1 数组转json $result = array( 'status' =>$status, 'message'=>$message, ' ...

随机推荐

  1. uploadify springMVC

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  2. Scrum Meeting 6-20151208

    任务安排 姓名 今日任务 明日任务 困难 董元财 修复app特定情况下崩溃 服务器购买记录接口 无 胡亚坤 聊天界面优化 发布记录和购买记录 无 刘猛 请假(生病了) 完成Scrum Meeting ...

  3. 学习mongo系列(八)密码与权限

    一.设置密码及用户角色[1] > db.createUser(... {... user: "maxh",... pwd: "123",... roles ...

  4. MFC编程入门之八(对话框:创建对话框类和添加控件变量)

    创建好对话框资源后要做的就是生成对话框类了.生成对话框类主要包括新建对话框类.添加控件变量和控件的消息处理函数. 例程Addition是基于对话框的程序,所以程序自动创建了对话框模板IDD_ADDIT ...

  5. Failed to execute goal org.codehaus.mojo:rpm-maven-plugin:2.1.1:rpm (default) on project **

    maven编译项目时报错:Failed to execute goal org.codehaus.mojo:rpm-maven-plugin:2.1.1:rpm (default) on projec ...

  6. Hbase写入hdfs源码分析

    版权声明:本文由熊训德原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/258 来源:腾云阁 https://www.qclo ...

  7. setInterval和setTimeout的区别

    setInterval会每隔指定的毫秒数后反复执行指定代码. setTimeout只会在指定的毫秒数后执行一次指定代码. setInterval的用法: // 创建(创建后即开始计时) var int ...

  8. Topcoder SRM583 DIV 2 250

    #include <string> #include <iostream> using namespace std; class SwappingDigits { public ...

  9. hadoop输入格式(InputFormat)

    InputFormat接口(package org.apache.hadoop.mapreduce包中)里包括两个方法:getSplits()和createRecordReader(),这两个方法分别 ...

  10. win7(64)位下WinDbg64调试VMware10下的win7(32位)

    win7(64)位下WinDbg64调试VMware10下的win7(32位) 一 Windbg32位还是64位的选择 参考文档<Windbg 32位版本和64位版本的选择> http:/ ...