[英]Protocol Buffer: From Java to Objective-C using byte[]
我目前正在使用Google的協議緩沖區。 它可以在Java和C#之間輕松地工作,但是我在嘗試實現與Obj-c的相同使用時遇到了問題。
Java WS返回一個byte []。 使用協議緩沖區API的代碼非常簡單:
productGroup.toByteArray();
我可以使用Skeet的C#端口重新創建對象,方法是:
byte[] result = searchWebService.SearchProductsProtocolBuffer(search);
ProductProtoGroup products = ProductProtoGroup.ParseFrom(result);
但是,在obj-c方面,我正在努力使用返回值。
我從同一Web服務RPC收到的NSString是這樣的:
CmYKEzgwMDAwMUFELTEzMjUyNzk5MTQySUZPT0QgJiBCRV...
我不太確定該怎么做,因為我不知道它是什么,除非它是由字節數組生成的。 我嘗試使用將其直接解析為NSData
NSData* data = [returnValue dataUsingEncoding:NSUTF8StringEncoding];
但在[ProductProtoGroup parseFromData:data];
,我得到一個InvalidProtocolBuffer
我已經在Java端檢查了原始byte[]
字節字符串/十六進制表示形式,它與我從ws接收的字符串不匹配。
十六進制為0-F。 也許每個字節都轉換為char? 不,那不匹配。
任何幫助,將不勝感激。
丹恩
有了新的想法和一些有用的評論,我終於明白了。
我想知道Web服務如何自動用Java發送一個byte [],然后在C#中重新構造它,以及以后如何存儲此消息。
找出字符串,
CmYKEzgwMDAwMUFELTEzMjUyNzk5MTQySUZPT0QgJiBCRV...
確實是肥皂信封中寄出的東西。 因此,在Java中創建byte []與傳輸之間,發生了一些事情。 查看C#中的消息處理程序,
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("",
RequestNamespace="x", ResponseNamespace="x",
Use=System.Web.Services.Description.SoapBindingUse.Literal,
ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
[return: System.Xml.Serialization.XmlElementAttribute("return",
Form=System.Xml.Schema.XmlSchemaForm.Unqualified,
DataType="base64Binary", IsNullable=true)]
public byte[] searchProductProtocolBuffer([System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] string arg0)
{
object[] results = this.Invoke("searchProductProtocolBuffer", new object[] {
arg0});
return ((byte[])(results[0]));
}
所以base64Binary !,我承認是第一次見面。 Skeet隨便看看,這是最安全的方法:
因此,知道了編碼之后,解決方案就變得簡單了。 使用針對此問題的答案中提出的算法: 如何在iphone-sdk上進行base64編碼? ,我的最終代碼變為:
NSString* returnValue = [WebServiceUtil processStringReturnValue:value];
NSData* data = [Encoding base64DataFromString:returnValue];
ProductProtoGroup* products = [ProductProtoGroup parseFromData:data];
我對目標C知之甚少,但是NSString沒有字節數組。 您是否嘗試過使用-[NSString UTF8String]將NSString轉換為char *?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.