Java中的Protobuf使用例子(转)

如何在Java中使用protobuf 是一种数据格式,同json,xml,等。但是一种二进制数据格式。 阅读详情

protobuf接口文件的生成这里就不举例子,只举一下在Java中怎么使用。

1). 定义"消息"的结构,即书写接口定义文件(.proto文件)。本例中,消息包含了"手机信息"。

文件名 mobile.proto

文件内容如下:

message MobilePhone{    
            
    required string               brand = 1 ;    
    required Hardware          hardware = 2;
    repeated string              software = 3;                    

}

message Hardware {

    required int32                    rom = 1; 
    required int32                    ram = 2;      
    required int32                    size = 3 ;    
    
}


2).通过定义的接口文件,生成Mobile.java

执行命令: protoc  --java_out=outputFile sourceFile

上述命令中outputFile 和 sourceFile 指 输出文件和源文件,需替换成实际文件(路径)名,如:

protoc  --java_out=./src   ./proto/mobile.proto


3).创建工程,编码

引入protobuf-java-2.4.1.jar

拷贝Mobile.java至工程

书写客户端,服务端代码。

具体代码如下:

客户端

package com.nevermore.client;

import java.net.Socket;

import com.nevermore.domain.Mobile;

public class Client {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        Socket socket = new Socket("127.0.0.1",3030);
        Mobile.MobilePhone.Builder builder = Mobile.MobilePhone.newBuilder();
        Mobile.Hardware.Builder hardware = Mobile.Hardware.newBuilder();
        hardware.setRam(2).setRom(16).setSize(5);
        builder.setHardware(hardware)
               .setBrand("Apple")
               .addSoftware("camera")
               .addSoftware("tecent")
               .addSoftware("browser")
               .addSoftware("player");
        byte[] messageBody = builder.build().toByteArray();
    
        int headerLen = 1;
        byte[] message = new byte[headerLen+messageBody.length];
        message[0] = (byte)messageBody.length;
        System.arraycopy(messageBody, 0,  message, 1, messageBody.length);
        System.out.println("msg len:"+message.length);
        socket.getOutputStream().write(message);
    }

}

服务端:

import java.net.ServerSocket;
import java.net.Socket;

import com.nevermore.domain.Mobile;
import com.nevermore.domain.Mobile.MobilePhone;

public class Server {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        ServerSocket serverSock = new ServerSocket(3030);
        Socket sock = serverSock.accept();
        byte[] msg = new byte[256];
        sock.getInputStream().read(msg);
        int msgBodyLen = msg[0];
        System.out.println("msg body len:"+msgBodyLen);
        byte[] msgbody = new byte[msgBodyLen];
        System.arraycopy(msg, 1, msgbody, 0, msgBodyLen);
        MobilePhone phone = Mobile.MobilePhone.parseFrom(msgbody);
        System.out.println("Receive:");
        System.out.println(phone.toString());
    }

}


运行后服务端打印:

Receive:
brand: "Apple"
hardware {
  rom: 16
  ram: 2
  size: 5
}
software: "camera"
software: "tecent"
software: "browser"
software: "player"

转自:http://my.oschina.net/u/1162561/blog/364772

外加一个字符串转整数和整数转字符串的工具:
/**
     * int到byte[]
     * @param i
     * @return
     */
    public static byte[] intToByteArray(int i) {   
          byte[] result = new byte[4];   
          //由高位到低位
          result[0] = (byte)((i >> 24) & 0xFF);
          result[1] = (byte)((i >> 16) & 0xFF);
          result[2] = (byte)((i >> 8) & 0xFF); 
          result[3] = (byte)(i & 0xFF);
          return result;
        }

        /**
         * byte[]转int
         * @param bytes
         * @return
         */
        public static int byteArrayToInt(byte[] bytes) {
               int value= 0;
               //由高位到低位
               for (int i = 0; i < 4; i++) {
                   int shift= (4 - 1 - i) * 8;
                   value +=(bytes[i] & 0x000000FF) << shift;//往高位游
               }
               return value;
         }
上边的方法适合从socket字节流中提取一部分字节来转为整数,但常用的String与int互转还有常用方法:
//字符串转整数
String str = "12345";

int num = Integer.valueOf(str).intValue();

//整数转字符串
int num = 12345;
String str = String.valueOf( num );
Redhawk:toggle rate从哪来? redhwak中toggle rate的相关设置 阅读详情

相关推荐

Quantum Espresso Hands-On实战训练(四)——PDOS计算与轨道分析

本文详细介绍了Quantum Espresso中PDOS计算与轨道分析的实战方法,重点解析了PDOS在材料电子结构研究中的核心价值,包括原子级分辨率、轨道级解析和自旋极化分析。通过具体案例和操作步骤,帮助读者掌握从输入文件准备到结果解读的全流程,并提供了高级分析技巧和疑难问题解决方案。

weixin_29211309的博客 504

Java 中使用 protobuf :入门基础篇,看这篇就够了!

protobuf

m0_37695902的博客 1万+

学习笔记之——Event Camera(事件相机)调研

概述 Event Camera是一种bio-inspired sensor,对应的领域为bio-inspired vision。对于传统的相机,从某种程度上,是捕获一个静态/静止的空间,而Event Camera的目的是:敏感地捕捉运动的物体。 对于传统RGB-camera,相机传回的信息是同步的,所谓同步,就是在某一时刻t,相机会进行曝光,把这一时刻所有的像素填在一个矩阵里回传,一张照片就诞生了。一张照片上所有的像素都对应着同一时刻。至于视频,不过是很多帧的图片,相邻图片间的时间间隔...

gwpscut的博客 3万+

一文搞懂Java应用ProtoBuf协议

本文将从ProtoBuf的概念开始介绍,逐步带大家搞清楚如何使用Java操作ProtoBuf协议。ProtoBuf即谷歌自己制定的一种数据格式,类似于Json、XML等,其最大的优势就是高效性,不同于Json和XML使用文本进行数据编码,ProtoBuf采用二进制进行编码,其传输速度、解析速度都比较快,序列化后的体积也更小。Java操作ProtoBuf分三步走,首先是生成proto对应Java文件,其次是引入第三方依赖库,最后编写测试代码。

Code豪客 5947

探索Vortex开源GPGPU:RISC-V SIMT架构(4-1),Execute SFU(1)

本文详细分析了Vortex RISC-V内核6级流水线中Execute阶段的SFU(特殊功能单元)模块。重点介绍了SFU的数据流结构,包含dispatch_unit、pe_switch、csr_unit、wctl_unit和gather_unit五个子模块。文章深入解析了warp控制指令wspawn和tmc的实现机制:wspawn用于激活指定数量的warp并设置新PC值,tmc则用于控制线程掩码和warp状态。通过C代码和汇编指令的对照分析,阐明了这些指令在并行计算中的关键作用,包括线程激活、状态切换和执行

weixin_55313207的博客 1363

OSMDroid(1)——OSM简介,基础例子搭建

1.OSMDroid简介 Osmdroid是一款完全开源的地图基本操作SDK,相比于现在普遍使用的百度地图,高德地图,谷歌地图等最大的好处就是开源。 最近在做一个军方项目,要求完全不能联网,从开发到应用整个阶段都是在局域网进行,相比之下采用了OSMDroid这个SDK作为解决方案。 先来看OSMDroid,便是(OpenStreetMapForAndroid),后面都简称OSM...

robotskly的博客 6179

Protobuf详解

Protobuf(Google Protocol Buffers),官方文档对 protobuf 的定义:protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,可用于数据通信协议和数据存储等,它是 Google 提供的一个具有高效协议数据交换格式工具库,是一种灵活、高效和自动化机制的结构数据序列化方法。因此,您可以根据自己的设计需求定义专属于您的标记。7.实践应用:通过实际应用案例来巩固您对 Protocol Buffers 的理解,并使用其提供的优势简化您的代码。

xtho62的博客 4343

3分钟创建智能体

智能体简介会在首页以及名片页展示,需要简洁明了的介绍智能体用途✅优秀示例:最好用第三人称直接说明智能体用途~如:打造生动文案好帮手、专业解梦,探寻梦境奥秘等❌反面教材:简介并未介绍用途、语义含糊。如:今天写点啥、看看你做的梦等以上步骤完成后,点击发布,就能成功创建属于你自己的智能体啦~仅自己可访问(免审):发布后仅开发者本人账号可访问、预览、使用该智能体仅链接可访问:发布后任何人均可通过链接访问、预览、使用该智能体。

soso1968的博客 2084

java中使用protobuf总结

java中读写protobuf

hsy12342611的专栏 3631

行为预测模型:Social LSTM与Graph Neural Networks

行为预测模型:Social LSTM与Graph Neural Networks ,人工智能,计算机视觉,大模型,AI,本文围绕行为预测模型Social LSTM与Graph Neural Networks展开,介绍了两者的基础概念、原理、应用场景,还对比了它们在优势、劣势和适用场景上的不同,最后给出了相应的代码示例。Social LSTM基于LSTM,通过社交池化层处理多智能体交互;图神经网络处理图结构数据,靠消息传递获取信息,二者各有侧重,适用于不同场景。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 15万+

Python实现多元线性回归(Multiple Linear Regression)

多元线性回归是一种用于建立多个自变量与因变量之间关系的统计学方法。在多元线性回归中,我们可以通过多个自变量来预测一个因变量的值。每个自变量对因变量的影响可以用回归系数来表示。

优快云 精品推荐 4331

Protobuf在java中的简单使用实例

protobuf是一种跨语言的数据转换协议,由google开源的,已支持大部份语言。在一般的数据交互过程中都是使用json,xml等来做数据的转换,这其中涉及复杂的解析与序列化反序列化问题,如果在大量数据并发请求时,也会导致性能问题。protobuf采用Varint编码技术,在某种程度上减少数字的字节数,关于Varint的实现原理可以参考: https://segmentfault.com/a/1190000020500985?utm_source=tag-newest 由于protobuf是跨语言的,

weixin_44642924的博客 1万+

解锁IPG Photonics SmartWeld系统,开启焊接新时代

SmartWeld 系统是 IPG Photonics 研发的一款先进的激光焊接解决方案,它隶属于自动化激光焊接系统类别 ,但却凭借一系列创新技术和独特设计,在众多同类产品中脱颖而出。该系统基于 IPG 在光纤激光技术领域的深厚积累,融合了先进的光束控制、智能监测和自动化控制等技术,旨在为工业制造提供高效、精准且稳定的焊接工艺。与传统激光焊接系统相比,SmartWeld 系统的独特之处首先体现在其光束控制技术上。它能够精确地调整激光束的能量分布、光斑大小和形状 ,以适应不同材料和焊接工艺的需求。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1430

protobuf java中的使用

Protobuf在Java中的简单使用   1.      在Java中使用protobuf需要jar包,下载protobuf-Java-2.5.0.jar包文件,添加到项目中。另外需要protoc.exe来编译proto文件。 2.      新建一个msg.proto文件: package com.test.learn;   option java_package = "com.t

u010129251的专栏 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ProtoBuf-java使用

Protocal Buffers(简称protobuf)是谷歌的一项技术,用于结构化的数据序列化、反序列化。官方解释:Protocol Buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。Protocol Buffers 是一种灵活,高效,自动化机制的结构数据序列化方法。可类比 XML,但是比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单。

mwolfking 6541

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Protobuf协议的Java应用例子

Protobuf协议,全称:Protocol Buffer 它跟JSON,XML一样,是一个规定好的数据传播格式。不过,它的序列化和反序列化的效率太变态了…… 来看看几张图你就知道它有多变态。 Protobuf的Java实例一、 安装Protobuf去Protobuf的GitHub下载,解压。如果你是Windows环境,则还要下载多一个东西。protobuf-2.5.0-windows.zi

码蚁君 5万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

java protobuf 例子_java使用protobuf例子

Protobuf版本:2.5.0最近研究Hadoop时,发现Hadoop的RPC使用到了Protobuf这个东西,于是就了解了这个 ProtobufProtobuf是google的一种数据交互格式(类似于xml,json),它独立于语言和平台。但是可怜的google已被墙了,我们只能从github那边下载由于Hadoop用的是2.5版本,所有我这里也同样下载了2.5的版本。有2个文件protobu...

weixin_29003437的博客 395

java protobuf 例子_Protobuf在java中使用例子

今天在学习李林峰老师的Netty权威指南的时候,在第八章的protobuf开发环境的搭建上出了一点小问题,无论如何都报Missing input file 的错误,无法生成pojo对应的文件。最后借助别人的博客得以解决。配置的整个过程如下:里面有一个protoc.exe是用来根据.proto文件生成相应的代码的,下面我们根据书中前面的一个pojo生成对应的文件package com.netty.s...

weixin_33371440的博客 225

Protobuf在Java中的简单使用

系列导航 (一)Protobuf下载和编译 一、编写一个.proto文件 option java_package = "com.proto"; option java_outer_classname = "PersonProto"; message Person { required string name = 1; required int32 age = 2; } 注 1、这里使用的是protobuf 2版本,也就是默认版本,如果需要用到3版本,需要在头部加上 syntax = "prot.

赵昕彧 2012

Java中使用protobuf

Java中使用protobuf

AiFlutter的博客 1462

Protobuf在Java中的使用

1.Protobuf的理解 是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构,总的来说就是传输协议中的一种。Protobuf的官方网址为http://code.google.com/apis/protocolbuffers/docs/t

家有小辉技术博客 1642

protobuf java object_protobuf 与 Java 对象互转

Java使用protobuf时,往往需要在Java对象(比如POJO)和protobuf message的Java对象间互转:protobuf接口需要传入message参数: 把POJO转成message, 作为接口参数;protobuf接口会返回message参数: 需要把message转成POJO, 供后续使用.比如:protobuf的messagemessage HelloRequest {...

weixin_33796288的博客 2411

java protobuf 例子_java中使用Protobuf的实例(Demo)

由于Protobuf受到推崇,故尝试采用protobuf来摒弃传统的xml进行传输数据。首先,需要下载的关于Protobuf的文件:1.到http://code.google.com/p/protobuf/downloads/list,选择其中的win版本下载,我选择的是protoc-2.4.1-win32.zip2.下载一个protobuf-java-2.4.1.jar文件(注意,要与你刚才下...

weixin_32202001的博客 422

Windows下,ProtoBuf在Eclipse/java中的安装、配置与使用

零:写在前面 protobuf是netty中用于解决粘包问题的一种方案。这种方案使用的是netty的基于协议传输的思想。netty的基础与粘包问题的几种解决方法会在后续给出。进入正题。 一:下载protobuf protobuf有几个渠道可以下载,比如这个源码版 再比如这个直接就能用的exe版 都是下了就能用系列 还有maven版本。下面会针对后两种分别解释 二:配置与...

暗黑世界 2474

Window下Protobuf Java使用教程

Protobuf是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。

不忘初心的专栏 3663

如何将Java中的byte转为protobuf中bytes

Java中的byte转为protobuf中bytes   在protobuf中如果定义了bytes类型的消息传输对象 syntax = &amp;quot;proto3&amp;quot;; option java_package=&amp;quot;com.test.protobuf&amp;quot;; option java_outer_classname = &amp;quot;NettyMessage&amp;quot;; mess

the Blog of Forward 1万+
上一篇: 一根管子就能种出全家人吃的菜
下一篇: java中ini文件工具(转)
woodcol
博客等级 码龄19年 288粉丝 429原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值