protobuf java 使用 window

别说谁变了你拦得住时间么 提交于 2020-02-26 02:07:28
1.到http://code.google.com/p/protobuf/downloads/list ,选择其中的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 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() ;


//反序列化过程
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());

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!