protocjava的简单介绍

博主:adminadmin 2023-01-27 00:18:07 290

本篇文章给大家谈谈protocjava,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

protoc.exe生成java代码一定要用命令行吗

是的,这个是用命令来执行的,不过你可以把命令写成windows的批处理文件 ,即.bat文件,每次双击即可执行。也可以使用java代码去调用protoc.exe。做成自动化的。

java 怎么使用protobuf库

1.到 ,选择其中的win版本下载,我选择的是protoc-2.4.1-win32.zip

2.下载一个protobuf-java-2.4.1.jar文件(注意,要与你刚才下的proto.exe版本相同)

然后就开始开发了。

步骤:

1.用记事本编写一个.proto文件:

}如:编写的是test.proto

package protobuf;

option java_package = "com.sq.protobuf";

option java_outer_classname = "FirstProtobuf";

message testBuf {

required int32 ID = 1;

required string Url = 2;

}

将其放在与刚解压的protoc.exe同级目录中。

2.在cmd中,到protoc-2.4.1-win32文件夹下,

执行

E:\protoc-2.4.1-win32 protoc.exe --java_out=./ test.proto

则可以找到的一个生成的FirstProtobuf.java文件。

3.在MyEclipse中新建一个java project,建立包com.sq.protobuf,然后将刚才生成的FirstProtobuf.java文件放在其下面。

此时会报错,因为没有引入jar包,在package视图下,将protobuf-java-2.4.1.jar引入,即可解决问题。

4.建立测试文件:

package com.sq.protobuf.test;

import java.io.ByteArrayInputStream;

import java.io.InputStream;

import java.sql.Blob;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.Statement;

import com.google.protobuf.InvalidProtocolBufferException;

import com.sq.protobuf.FirstProtobuf;

public class Test {

public static void main(String[] args) {

//序列化过程

//FirstProtobuf是生成类的名字,即proto文件中的java_outer_classname

//testBuf是里面某个序列的名字,即proto文件中的message testBuf

FirstProtobuf.testBuf.Builder builder=FirstProtobuf.testBuf.newBuilder();

builder.setID(777);

builder.setUrl("shiqi");

//testBuf

FirstProtobuf.testBuf info=builder.build();

byte[] result = info.toByteArray() ;

String driver = "oracle.jdbc.driver.OracleDriver";

String url = "jdbc:oracle:thin:@10.64.59.12:1521/orcl";

String user = "parkingsystem";

String password = "parkingsystem";

try {

Class.forName(driver);

Connection conn = DriverManager.getConnection(url, user, password);

if(!conn.isClosed()){

System.out.println("Succeeded connecting to the Database!");

//此处只能使用prepareStatement

PreparedStatement ps = conn.prepareStatement("insert into test(id,test) values (1,?)");

//写入数据库,要把它改写为流的形式

ByteArrayInputStream stream = new ByteArrayInputStream(result);

ps.setBinaryStream(1,stream,stream.available());

Statement statement = conn.createStatement();

Blob blob = null;

ps.execute();

////////////////上述完成将写入数据库的操作,数据库中对应的字段的属性要设置为Blob

String sql = "select test from test";

ResultSet rs = statement.executeQuery(sql);

if(rs.next()){

blob = rs.getBlob("test");

}

byte[] s = blob.getBytes(1,(int)blob.length());

FirstProtobuf.testBuf testBuf = FirstProtobuf.testBuf.parseFrom(s);

System.out.println(testBuf);

conn.close();

}

}catch(Exception e) {

e.printStackTrace();

}

//反序列化过程

try {

FirstProtobuf.testBuf testBuf = FirstProtobuf.testBuf.parseFrom(result);

System.out.println(testBuf);

} catch (InvalidProtocolBufferException e) {

e.printStackTrace();

}

}

}

发现可以将其序列化,插入到数据库,并可以从数据库出取出后,反序列化,内容可以正常显示出来。

注意的就是2点:

1.不能用statement,否则无法插入blob类型的数据

2.为参数赋值时,要用

ByteArrayInputStream stream = new ByteArrayInputStream(result);

ps.setBinaryStream(1,stream,stream.available());

如何将.proto通过命令转换成.java文件

1. 下载 protoc-2.4.1-win32.zip 至本地并解压

2.通过命令行将.proto的文件生成为.java的文件官网上是这样写的

protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/addressbook.proto

下面用图形来说明如果操作。下载的部分就不说了

命令:

文件夹结构:

关于protocjava和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。