導航:首頁 > 編程語言 > javaprotocolbuffer

javaprotocolbuffer

發布時間:2022-06-09 02:47:55

Ⅰ protocol buffer能支持java object 類型嗎

對於每個欄位而言都有一個修飾符(required/repeated/optional)、欄位類型(bool/string/bytes/int32等)和欄位標簽(Tag)組成。

Ⅱ 怎樣把json轉為protocol buffer

例子:

package org.protob;

import org.protob.W.helloworld;

import com.google.protobuf.;
import com.googlecode.protobuf.format.JsonFormat;
import com.googlecode.protobuf.format.JsonFormat.ParseException;
/**
* 下載 protoc-2.5.0-win32.zip
* cmd: protoc.exe --java_out=./ w.proto
* @author liangrui
*
*/
public class Main {

public static void main(String[] args) throws Exception {
main2(null);
main3(null);
main4(null);
}

//序列化 /返序列化
public static void main2(String[] args) throws {
//序列化
helloworld.Builder builder=helloworld.newBuilder();
builder.setId(10);
builder.setStr("fx");
builder.setOpt(20);
helloworld info=builder.build();
byte[] result=info.toByteArray() ;
//返序列化
helloworld msg = helloworld.parseFrom(result);
System.out.println(msg);

}

//protobuf轉json
public static void main3(String[] args) throws {

//序列化
helloworld.Builder builder=helloworld.newBuilder();
builder.setId(10);
builder.setStr("fx");
builder.setOpt(20);
helloworld info=builder.build();
byte[] result=info.toByteArray() ;

//返序列化
helloworld hello = helloworld.parseFrom(result);
System.out.println(hello);

String jsonFormat =JsonFormat.printToString(hello);
System.out.println(jsonFormat);

}

//josn轉protobuf
public static void main4(String[] args) throws ParseException {
helloworld.Builder builder =helloworld.newBuilder();
String jsonFormat = "{id:11,str:'xxx',opt:50}";
JsonFormat.merge(jsonFormat, builder);

System.out.println(builder.build());

}

}
/**
output:
id: 10
str: "fx"
opt: 20

id: 10
str: "fx"
opt: 20

{"id": 10,"str": "fx","opt": 20}
id: 11
str: "xxx"
opt: 50
*/

proto文件 w.proto

package org.protob;
message helloworld
{
required int32 id = 1; // ID
required string str = 2; // str
optional int32 opt = 3; //optional field
}

生成後的java類

// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: w.proto

package org.protob;

public final class W {
private W() {}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistry registry) {
}
public interface helloworldOrBuilder
extends com.google.protobuf.MessageOrBuilder {

// required int32 id = 1;
/**
* <code>required int32 id = 1;</code>
*
* <pre>
* ID
* </pre>
*/
boolean hasId();
/**
* <code>required int32 id = 1;</code>
*
* <pre>
* ID
* </pre>
*/
int getId();

// required string str = 2;
/**
* <code>required string str = 2;</code>
*
* <pre>
* str
* </pre>
*/
boolean hasStr();
/**
* <code>required string str = 2;</code>
*
* <pre>
* str
* </pre>
*/
java.lang.String getStr();
/**
* <code>required string str = 2;</code>
*
* <pre>
* str
* </pre>
*/
com.google.protobuf.ByteString
getStrBytes();

// optional int32 opt = 3;
/**
* <code>optional int32 opt = 3;</code>
*
* <pre>
*optional field
* </pre>
*/
boolean hasOpt();
/**
* <code>optional int32 opt = 3;</code>
*
* <pre>
*optional field
* </pre>
*/
int getOpt();
}
/**
* Protobuf type {@code org.protob.helloworld}
*/
public static final class helloworld extends
com.google.protobuf.GeneratedMessage
implements helloworldOrBuilder {
// Use helloworld.newBuilder() to construct.
private helloworld(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
super(builder);
this.unknownFields = builder.getUnknownFields();
}
private helloworld(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

private static final helloworld defaultInstance;
public static helloworld getDefaultInstance() {
return defaultInstance;
}

public helloworld getDefaultInstanceForType() {
return defaultInstance;
}

private final com.google.protobuf.UnknownFieldSet unknownFields;
@java.lang.Override
public final com.google.protobuf.UnknownFieldSet
getUnknownFields() {
return this.unknownFields;
}
private helloworld(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf. {
initFields();
int mutable_bitField0_ = 0;
com.google.protobuf.UnknownFieldSet.Builder unknownFields =
com.google.protobuf.UnknownFieldSet.newBuilder();
try {
boolean done = false;
while (!done) {
int tag = input.readTag();
switch (tag) {
case 0:
done = true;
break;
default: {
if (!parseUnknownField(input, unknownFields,
extensionRegistry, tag)) {
done = true;
}
break;
}
case 8: {
bitField0_ |= 0x00000001;
id_ = input.readInt32();
break;
}
case 18: {
bitField0_ |= 0x00000002;
str_ = input.readBytes();
break;
}
case 24: {
bitField0_ |= 0x00000004;
opt_ = input.readInt32();
break;
}
}
}
} catch (com.google.protobuf. e) {
throw e.setUnfinishedMessage(this);
} catch (java.io.IOException e) {
throw new com.google.protobuf.(
e.getMessage()).setUnfinishedMessage(this);
} finally {
this.unknownFields = unknownFields.build();
makeExtensionsImmutable();
}
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return org.protob.W.internal_static_org_protob_helloworld_descriptor;
}

protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
internalGetFieldAccessorTable() {
return org.protob.W.internal_static_org_protob_helloworld_fieldAccessorTable
.(
org.protob.W.helloworld.class, org.protob.W.helloworld.Builder.class);
}

public static com.google.protobuf.Parser<helloworld> PARSER =
new com.google.protobuf.AbstractParser<helloworld>() {
public helloworld parsePartialFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf. {
return new helloworld(input, extensionRegistry);
}
};

@java.lang.Override
public com.google.protobuf.Parser<helloworld> getParserForType() {
return PARSER;
}

Ⅲ 如何使用JAVA查詢Oracle資料庫字元串

事件: 報表介面資料庫突然無法連接 ,導致無法正常取數操作。 異常信息: Io 異常: Got minus one from a read call 分析: 資料庫地址及其配置信息都為發生變化 , 經詢問後得知資料庫調整為集群工作方式 。 結果:1. 修改普通 JDBC 連接字元串為集群工作方式。 2. 介面中的 JDBC JAR文件不適合集群工作方式。 思維寬度: 1. JDBC JAR文件的選擇, Classes12 到底是個啥玩意? 第一次聽很暈 , 其實就是 oracle 資料庫自帶的 JDBC ,全名叫 classes12.jar 。 高手都這么忽悠人的! 常用JDBC JAR 信息 序號 常用JDBC驅動包 JDK 1.4 JDK 1.5 JDK 1.6 單例資料庫 集群資料庫 Class.forName 1 OracleJdbcDriver9i.jar 支持 支持 支持 支持 不支持 oracle.jdbc.OracleDriver 2 classes12.jar(oracle 92i) 支持 支持 支持 支持 不支持 oracle.jdbc.OracleDriver 3 ojdbc14.jar(oracle 92i) 支持 支持 支持 支持 不支持 oracle.jdbc.OracleDriver 4 classes12.jar(oracle 10G) 支持 支持 支持 支持 支持 oracle.jdbc.OracleDriver 5 ojdbc14.jar(oracle 10G) 支持 支持 支持 支持 支持 oracle.jdbc.OracleDriver 6 ojdbc5.jar 不支持 支持 支持 支持 支持 無需 Class.forName 載入 7 ojdbc6.jar 不支持 不支持 支持 支持 支持 無需 Class.forName 載入 序號1 : OracleJdbcDriver9i.jar 這就是我常用的 JDBC 驅動,本次肇事者 !出身不明 , 戶口本 (MANIFEST.MF) 內容為空 ,初步分析為 oracle92i 時代產物。序號2, 3 : 系出同門 ,都為 oracle92i 自帶 ,家庭住址: oracle/jdbc/libclasses12.jar 戶口本信息:Specification-Title: 「Oracle JDBC driver classes for use with JDK1.2 and JDK1.3」Specification-Version: 「Oracle JDBC Driver version - 9.0.2.0.0」ojdbc14.jar 戶口本信息:Specification-Title: 「Oracle JDBC driver classes for use with JDK1.4」Specification-Version: 「Oracle JDBC Driver version - 9.0.2.0.0」序號4,5 : oracle 10G 的產物 與 oracle 92i 最大的區別在於支持 集群查詢。序號 6,7: ojdbc5.jar 支持 JDK 1.5 ,支持 JDBC 3.0 ojdbc6.jar 支持 JDK 1.6 ,支持 JDBC 4.0兩者無需執行 Class.forName(「oracle.jdbc.OracleDriver」); 直接 DriverManager.getConnection( URL, USER, PWD) ; 就OK了。如果項目僅支持 JDK1.4 就不要妄動 , 選擇序號 4 ,5 不二的選擇 。如果項目支持 JDK1.5 以上 推薦 序號 6 ,7 研究一下新特性。 2. 集群工作方式 連接字元串…慎重選擇連接之外的屬性。 偷懶粘貼下代碼 ! StringBuffer url = new StringBuffer();url.append(「jdbc:oracle:thin:@(description= (address_list =」);url.append(「(address=(protocol=tcp)(host=192.168.31.9)(port=1521))」);//根據自己情況繼續追加集群信息,格式如下//bf.append(「(address=(protocol=tcp)(host=10.37.27.112)(port=1521))」);url.append(「(load_balance=yes)」); //load_balance=yes;表示是否負載均衡url.append(「)」); //address_list 結束url.append(「(connect_data =」);url.append(「(server = dedicated)」); //server = dedicated;表示專用伺服器模式,可以去掉url.append(「(service_name=wangjj)」); //資料庫服務名稱url.append(「(failover_mode =」);url.append(「(type=session)」); //TYPE = SESSION表示當一個連接好的會話的實例發生故障,系統會自動將會話切換到其他可用的實例,前台應用無須再度發起連接,但會話正在執行的SQL 需要重新執行url.append(「(method=basic)」); //METHOD = BASIC表示初始連接就連接一個接點,彵還有個選項是preconnect,表示初始連接所有的接點url.append(「(retries=5)」); //RETRIES 重試次數url.append(「(delay=15)」); //DELAY 重試延遲 單位為秒url.append(「)」); //failover_mode 結束url.append(「)」); //connect_data 結束url.append(「)」); //description 結束

Ⅳ Java調用URL錯誤,報505

HttpURLConnection 請求中 參數中如果有 空格,請求則會 505錯誤


解決: 需要對有空格的參數 做URL編碼處理。

importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.net.MalformedURLException;
importjava.net.URL;
importjava.net.URLEncoder;

importsun.net.www.protocol.http.HttpURLConnection;

importcom.alibaba.fastjson.JSONObject;


{
="http://localhost:8080/agd-restful/services/restful/QueryService/queryData/*?queryParam=";

publicstaticvoidmain(String[]args)
{
JSONObjectobj=newJSONObject();
obj.put("XM","匡匡");
obj.put("BIRTHDAY",<spanstyle="color:#FF6666;">getURLEncoder</span>("1988-01-0100:00:00,1988-12-3000:00:00"));

Stringurls=targetURL+obj.toString();
requestRestServer(urls);

}

(Stringurl)
{
JSONObjectobj=newJSONObject();
try
{
URLrestServiceURL=newURL(url);

=(HttpURLConnection)restServiceURL.openConnection();
httpConnection.setRequestMethod("GET");
httpConnection.setRequestProperty("Accept","application/json");
httpConnection.setRequestProperty("Accept-Charset","UTF-8");
httpConnection.setRequestProperty("contentType","UTF-8");

if(httpConnection.getResponseCode()!=200){
thrownewRuntimeException(":"
+httpConnection.getResponseCode());
}

BufferedReaderresponseBuffer=newBufferedReader(newInputStreamReader(
(httpConnection.getInputStream()),"utf-8"));

Stringoutput="";
Stringresult="";
System.out.println("OutputfromServer: ");

while((output=responseBuffer.readLine())!=null){
//System.out.println(output);
result=output;
}
obj=JSONObject.parseObject(result);
System.out.println(obj.toString());
httpConnection.disconnect();

}catch(MalformedURLExceptione){

e.printStackTrace();

}catch(IOExceptione){
e.printStackTrace();

}
returnobj;
}

@SuppressWarnings("deprecation")
<spanstyle="color:#FF6666;">(Stringdest)
{
returnURLEncoder.encode(dest);
}</span>
}

修改後 正常ok

Ⅳ 如何把protobuf從linuee卸載

你找到文件夾,刪除或粉碎

可以用類似騰訊電腦管家的工具粉碎

打開騰訊電腦管家——工具箱——文件粉碎


打開騰訊電腦管家——工具箱——清理注冊表

Ⅵ 基於protocol buffer 的java網路編程

ProtocolBuffer只是一個數據協議格式,你將ProtocolBuffer生成的二進制以流的形式發送到客戶端或服務端即可

Ⅶ JAVA的常用的類庫有哪些

一、日誌相關類庫

日誌庫是很常見的,因為你在每一個項目中都需要他們。列印日誌是伺服器端應用中最重要的事情,因為日誌是你了解你的程序發生了什麼的唯一途徑。盡管JDK附帶自己的日誌庫,但是還是有很多更好的選擇可用,例如 Log4j 、 SLF4j 和 LogBack。

Java開發人員應該熟悉日誌記錄的利弊, 並且了解為什麼SLF4J要比Log4J要好。

二、JSON解析庫

在當今世界的web服務和物聯網中(IoT),JSON已經取代了XML,成為從客戶端到伺服器傳送信息的首選協議。有一個好消息和一個壞消息。壞消息 是JDK沒有提供JSON庫。好消息是有許多優秀的第三方庫可以用來解析和創建JSON消息,如 Jackson 和 Gson

一個Java web開發人員應該熟悉Jackson 和 Gson這兩種中的至少一種庫。

三、單元測試庫

單元測試技術的使用,是區分一個一般的開發者和好的開發者的重要指標。程序員經常有各種借口不寫單元測試,但最常見的借口就是缺乏經驗和知識。常見的單測框架有 JUnit , Mockito 和PowerMock 。

《2020最新Java基礎精講視頻教程和學習路線!》


四、通用類庫

有幾個很好的第三方通用庫可供Java開發人員使用,例如 Apache Commons 和 Google Guava 。我會經常在我的代碼中使用這些通用類庫,因為這些類庫都是經過無數開發者實踐過的,無論是實用性還是在性能等方面都是最佳的。

五、Http 庫

我不是很喜歡JDK的一個重要原因就包括他們缺乏對HTTP的支持。雖然可以使用java.net包類,但是這和直接使用像 Apache HttpClient 和 HttpCore 等開源類庫比起來麻煩太多了。

盡管JDK 9將開始HTTP 2.0,也對HTTP的支持做了優化,但是我還是強烈建議所有的Java開發人員熟悉流行的HTTP處理類庫,例如HttpClient和HttpCore HTTP等庫。

六、XML解析庫

市面上有很多XML解析的類庫,如 Xerces , JAXB , JAXP , Dom4j , Xstream 等。 Xerces2是下一代高性能,完全兼容的XML解析工具。Xerces2定義了 Xerces Native Interface (XNI)規范,並提供了一個完整、兼容標準的 XNI 規范實現。該解析器是完全重新設計和實現的,更簡單以及模塊化。

七、Excel讀寫庫

許多應用程序需要提供把數據導出到Excel的功能,如果你要做相同的Java應用程序,那麼你需要 Apache POI API 。

這是一個非常豐富的類庫,你可以從Java程序讀寫XLS文件。

八、位元組碼庫

如果你正在編寫一個框架或者類庫。有一些受歡迎的位元組碼庫如 javassist 和 Cglib Nodep 可以供你選擇,他們可以讓你閱讀和修改應用程序生成的位元組碼。

Javassist使得JAVA位元組碼操作非常簡單。它是一個為編輯Java位元組碼而生的類庫。 ASM 是另一個有用的位元組碼編輯庫。

九、資料庫連接池庫

如果你的Java應用程序與資料庫交互不是使用資料庫連接池庫的話,那麼你就大錯特錯了。因為在運行時創建資料庫連接非常耗時並且會拖慢你的程序。所以牆裂建議使用,有些好用的連接池可供選擇,如 Commons Pool 和 DBCP 。

在web應用程序中,web伺服器通常提供了這些功能。但是在java項目中需要把資料庫連接池的類庫導入到應用中。

十、消息傳遞庫

像日誌和資料庫連接池一樣,消息傳遞也是很多實際的Java項目中必備的。Java提供了JMS Java消息服務,但這不是JDK的一部分,你需要單獨的引入jms.jar。類似地,如果您准備使用第三方消息傳遞協議, Tibco RV 是個不錯的選擇。

十一、PDF處理庫

除了Excel和Word,PDF也是一種常用的文件格式。如果你的應用程序要支持PDF格式的文件處理,你可以使用 iText 和 Apache FOP 類庫。兩者都提供了非常有用的PDF處理功能。

十二、日期和時間庫

在Java之前,JDK的日期和時間庫一直被人們所詬病,比如其非線程安全的、不可變的、容易出錯等。很多開發人員會選擇更好用的 JodaTime 類庫。

但是在Java8推出之後,我們就可以徹底放棄JodaTime了,因為Java 8提供了其所有功能。但是,如果你的代碼運行在一個低版本的JDK中,那麼JodaTime還是值得使用的。

十三、集合類庫

雖然JDK有豐富的集合類,但還是有很多第三方類庫可以提供更多更好的功能。如 Apache Commons Collections 、 Goldman Sachs collections 、 Google Collections 和 Trove 。Trove尤其有用,因為它提供所有標准Collections 類的更快的版本以及能夠直接在原語(primitive)(例如包含int 鍵或值的Map 等)上操作的Collections 類的功能。

FastUtil是另一個類似的API,它繼承了Java Collection Framework,提供了數種特定類型的容器,包括映射map、集合set、列表list、優先順序隊列(prority queue),實現了java.util包的標准介面(還提供了標准類所沒有的雙向迭代器),還提供了很大的(64位)的array、set、list,以及快速、實用的二進制或文本文件的I/O操作類。

十四、郵件API

javax.mail 和 Apache Commons Email 提供了發送郵件的api。它們建立在JavaMail API的基礎上,提供簡化的用法。

十五、HTML解析庫

和XML與JSON類似,HTML是另外一種我們可能要打交道的傳輸格式。值得慶幸的是,我們有jsoup可以大大簡化Java應用程序使用HTML。你不僅可以使用 JSoup 解析HTML還可以創建HTML文檔。

十六、加密

Apache Commons家族中的 Commons Codec 就提供了一些公共的編解碼實現,比如Base64, Hex, MD5,Phonetic and URLs等等。

十七、嵌入式SQL資料庫庫

我真的是非常喜歡像 H2 這種內存資料庫,他可以嵌入到你的Java應用中。在你跑單測的時候如果你需要一個資料庫,用來驗證你的SQL的話,他是個很好的選擇。順便說一句,H2不是唯一嵌入式DB,你還有 Apache Derby 和 HSQL 可供選擇。

十八、JDBC故障診斷庫

有不錯的JDBC擴展庫的存在使得調試變得很容易,例如P6spy,這是一個針對資料庫訪問操作的動態監測框架,它使得資料庫數據可無縫截取和操縱,而不必對現有應用程序的代碼作任何修改。 P6Spy 分發包包括P6Log,它是一個可記錄任何 Java 應用程序的所有JDBC事務的應用程序。其配置完成使用時,可以進行數據訪問性能的監測。

十九、序列化庫

Google Protocol Buffer是一種輕便高效的結構化數據存儲格式,可以用於結構化數據串列化,或者說序列化。它很適合做數據存儲或 RPC 數據交換格式。可用於通訊協議、數據存儲等領域的語言無關、平台無關、可擴展的序列化結構數據格式。目前提供了 C++、Java、Python 三種語言的 API。

二十、網路庫

一些有用的網路庫主要有 Netty 的和 Apache MINA 。如果您正在編寫一個應用程序,你需要做的底層網路任務,可以考慮使用這些庫。

這都是每位Java開發人員應該熟悉的,並且十分有用的庫。Java生態系統非常龐大的,你會發現有很多不同的類庫可以做不同的事情。每個你想到的東西,都可能有一個庫可以做到。

要相信,你遇到的問題,肯定不止你一個遇到過。
要相信,也許有很多人比你更勤奮。
要相信,你用或不用,輪子就在那裡。
要相信,使用這些類庫,你和你的代碼都會變得更好。

原文鏈接:https://blog.csdn.net/u011001084/article/details/79216958

Ⅷ Java的一段網路程序編寫,請高手賜教!

1.Thread(this)就是構造線程的語句,start()是啟動語句。
2.知道awt的事件處理不?還有內部類,感覺你應該不知道,去看看吧,你這程序都不知道怎麼改。

Ⅸ google protocol buffer java怎麼會有set方法

用來給類成員對象賦值的方法。 一個類對於其成員對象的管理一般比較安全的方法應當是將其內部成員對象設置為private屬性(這樣可以防止外部錯誤修改),然後提供相應的方法去操作內部成員對象。

閱讀全文

與javaprotocolbuffer相關的資料

熱點內容
信號分析pdf 瀏覽:927
暴力刪除命令 瀏覽:803
qt如何編譯加快速度 瀏覽:903
php添加數據sql語句 瀏覽:717
免費的小說app有什麼 瀏覽:405
螺桿壓縮機進氣閥動畫 瀏覽:651
兩台伺服器如何做負載均衡 瀏覽:227
程序員的工資是漲的嗎 瀏覽:813
視頻存儲伺服器可以干什麼 瀏覽:463
創建文件夾安裝失敗怎麼回事 瀏覽:832
程序員高考隔了幾年 瀏覽:822
雲伺服器是哪一層 瀏覽:22
jit編譯器的jit什麼意思 瀏覽:330
我想清理手機中空白文件夾 瀏覽:976
電腦e盤文件夾刪不掉怎麼辦 瀏覽:607
外圓凹圓弧編程 瀏覽:461
html5編程題 瀏覽:839
乾燥機製冷壓縮機一開就跳動 瀏覽:389
吉林壓縮空氣流量監測 瀏覽:618
根據地址獲取經緯度php 瀏覽:13