序列化json和protobuf大小比较
使用protobuf序列化为二进制和json序列化字符串大小比较
代码demo
package com.gxf.demo;
import java.io.*;
public class PtotobufDemo {
    public static void main(String[] args) throws IOException {
        AddressBookProtos.Person gxf =
                AddressBookProtos.Person.newBuilder()
                        .setId(1234)
                        .setName("guan xianseng")
                        .setEmail("guanxianseng@example.com")
                        .addPhones(
                                AddressBookProtos.Person.PhoneNumber.newBuilder()
                                        .setNumber("555-4321")
                                        .setType(AddressBookProtos.Person.PhoneType.HOME))
                        .build();
        String s = gxf.toString();
        System.out.println("json length: " + s.length());
        System.out.println(s);
        byte[] bytes = gxf.toByteArray();
        String filePath = "./log";
        File logFile = new File(filePath);
        OutputStream outputStream = new FileOutputStream(logFile);
        gxf.writeTo(outputStream);
        //json写到文件
        writeTextFile(s);
        System.out.println(bytes.length);
    }
    /**
     * 写入文本文件
     * */
    private static void writeTextFile(String content) throws IOException {
        File writename = new File("./json.txt"); // 相对路径,如果没有则要建立一个新的output。txt文件
        writename.createNewFile(); // 创建新文件
        BufferedWriter out = new BufferedWriter(new FileWriter(writename));
        out.write(content); // \r\n即为换行
        out.flush(); // 把缓存区内容压入文件
        out.close(); // 最后记得关闭文件
    }
}
proto文件
syntax = "proto2"; package demo; option java_package = "com.gxf.demo";
option java_outer_classname = "AddressBookProtos"; message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3; enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
} message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
} repeated PhoneNumber phones = 4;
} message AddressBook {
repeated Person people = 1;
}
pb:58字节
json:110字节,删掉空格还有100字节
序列化json和protobuf大小比较的更多相关文章
- 尴尬的事情又发生Newtonsoft.Json vs Protobuf.net
		
写程序做下性能测试都是例行的事情了,一般在普通电脑上测试一下如果比较理想那基本不出什么意外!但世事难料,代码写得不好经常担心CPU不够用,其实写得好但不能完全发挥出CPU资源的优势更是一件悲剧的事情! ...
 - 常用模块(数据序列化  json、pickle、shelve)
		
本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...
 - JavaScriptSerializer 序列化json 时间格式
		
利用JavaScriptSerializer 序列化json 时间格式,得到的DateTime值值显示为“/Date(700000+0500)/”形式的JSON字符串,显然要进行转换 1.利用字符串直 ...
 - 使用 ServiceStack.Text 序列化 json的实现代码【转】
		
转自:http://www.jb51.net/article/38338.htm 今天发篇文章总结下自己使用 ServiceStack.Text 来序列化 json.它的速度比 Newtonsoft. ...
 - 使用 ServiceStack.Text 序列化 json 比Json.net更快
		
本节将介绍如何使用ServiceStack.Text 来完成高性能序列化和反序列化操作. 在上章构建高性能ASP.NET应用的几点建议 中提到使用高性能类库,有关于JSON序列化的讨论. 在诊断web ...
 - Jil序列化JSON
		
使用Jil序列化JSON提升Asp.net web api 性能 JSON序列化无疑是Asp.net web api 里面性能提升最重要的一环. 在Asp.net web api 里面我们可以插入 ...
 - 序列化json对象,通过ajax传入asp.net mvc后台
		
序列化json对象,通过ajax传入asp.net mvc后台 序列化json对象,通过ajax传入asp.net mvc后台 今天遇到一个问题,准备把组织好的json对象通过jquery.aja ...
 - Pythoy 数据类型序列化——json&pickle 模块
		
Pythoy 数据类型序列化--json&pickle 模块 TOC 什么是序列化/反序列化 pickle 模块 json 模块 对比json和pickle json.tool 命令行接口 什 ...
 - mvc 使用Newtonsoft.Json进行序列化json数据
		
mvc 使用Newtonsoft.Json进行序列化json数据 JsonResult 使用js 序列号化,先集成扩展.使用newtonsoft http://blog.csdn.net/zhang ...
 
随机推荐
- PHP选项和运行
			
PHP运行模式 五大运行模式 1.cgi 通用网关接口 2.fast-cgi cgi升级 3.cli (Command Line Interface) 4.isapi 微软提供的面向Internet服 ...
 - 【Es】jest操作elasticsearch
			
https://blog.csdn.net/niuchenliang524/article/details/82869319 操作es的客房端有多个,在此例出三种(具体区别自行百度),本文讲的是jes ...
 - 【洛谷1685】游览 拓扑排序+DP
			
题目描述 顺利通过了黄药师的考验,下面就可以尽情游览桃花岛了! 你要从桃花岛的西头开始一直玩到东头,然后在东头的码头离开.可是当你游玩了一次后,发现桃花岛的景色实在是非常的美丽!!!于是你还想乘船从桃 ...
 - flask中的蓝图 Blueprint
			
模块化 随着flask程序越来越复杂,我们需要对程序进行模块化的处理,之前学习过python的模块化管理,于是针对一个简单的flask程序进行模块化处理 简单来说,Blueprint 是一个存储操作方 ...
 - Angular 2: 404 error occur when I refresh through the browser [duplicate]
			
https://stackoverflow.com/questions/35284988/angular-2-404-error-occur-when-i-refresh-through-the-br ...
 - Moving docker images location to different partition
			
By default docker will put all the data including images under /var/lib/docker(At least on Debian). ...
 - Linux  安装 Djiango
			
yum 安装方法 以下安装位于 Centos Linux 环境下安装,如果是你的 Linux 系统是 ubuntu 请使用 apt-get 命令. 默认情况下 Linux 环境已经支持了Python. ...
 - UVA - 11825 状压DP
			
该题目是EMAXX推荐的练习题,刘汝佳的书也有解说 如果S0属于全集,那S0就可以作为一个分组,那么S分组数可以是best{当前S中S0的补集+1} 对于集合类的题目我觉得有点抽象,希望多做多理解把 ...
 - ActionHelper
			
/// <summary> /// 方法帮助类 /// </summary> public class ActionHelper { /// <summary> / ...
 - 前端PostJosn,后端转化相应的类
			
/// <summary> /// JsonPost特性类 /// </summary> [AttributeUsage(AttributeTargets.Method, In ...