/*ZWL * /// <summary> * /// Writes a group field value, without a tag, to the stream. * /// </summary> * public void WriteGroupNoTag(IMessageLite value) { * value.WriteTo(this); * } * * public void WriteMessageNoTag(IMessageLite value) { * WriteRawVarint32((uint)value.SerializedSize); * value.WriteTo(this); * } * ZWL */ public void WriteBytesNoTag(ByteString value) { // TODO(jonskeet): Optimise this! (No need to copy the bytes twice.) byte[] bytes = value.ToByteArray(); WriteRawVarint32((uint)bytes.Length); WriteRawBytes(bytes); }
public void FromBase64_WithText() { byte[] data = new byte[] { 0, 1, 2, 3, 4, 5, 6 }; string base64 = Convert.ToBase64String(data); ByteString bs = ByteString.FromBase64(base64); TestUtil.AssertBytesEqual(data, bs.ToByteArray()); }
/*ZWL * /// <summary> * /// Writes a group field value, including tag, to the stream. * /// </summary> * public void WriteGroup(int fieldNumber, IMessageLite value) { * WriteTag(fieldNumber, WireFormat.WireType.StartGroup); * value.WriteTo(this); * WriteTag(fieldNumber, WireFormat.WireType.EndGroup); * } * * [Obsolete] * public void WriteUnknownGroup(int fieldNumber, IMessageLite value) { * WriteTag(fieldNumber, WireFormat.WireType.StartGroup); * value.WriteTo(this); * WriteTag(fieldNumber, WireFormat.WireType.EndGroup); * } * * public void WriteMessage(int fieldNumber, IMessageLite value) { * WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); * WriteRawVarint32((uint)value.SerializedSize); * value.WriteTo(this); * } * ZWL*/ public void WriteBytes(int fieldNumber, ByteString value) { // TODO(jonskeet): Optimise this! (No need to copy the bytes twice.) WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); byte[] bytes = value.ToByteArray(); WriteRawVarint32((uint)bytes.Length); WriteRawBytes(bytes); }
public void ToByteArrayCopiesContents() { ByteString bs = ByteString.CopyFromUtf8("Hello"); byte[] data = bs.ToByteArray(); Assert.AreEqual('H', data[0]); Assert.AreEqual('H', bs[0]); data[0] = 0; Assert.AreEqual(0, data[0]); Assert.AreEqual('H', bs[0]); }
public void ProcessRequest(HttpContext context) { byte[] fileData = null; using (var binaryReader = new BinaryReader(context.Request.InputStream)) { fileData = binaryReader.ReadBytes(Convert.ToInt32(context.Request.InputStream.Length)); } PersonTest per = PersonTest.ParseFrom(fileData);//反序列化为对象 string filename = per.Name; Google.ProtocolBuffers.ByteString str = per.Buf; string path = context.Server.MapPath(filename); if (per.Isimg) { ImageHelper.SaveFromBufferOpenOrCreate(str.ToByteArray(), path);//保存图片操作 } else { FileHelper.SaveFile(str.ToByteArray(), path);//保存图片操作 } var builder = per.ToBuilder(); builder.SetName(per.Name); builder.SetEmail(per.Email); builder.SetId(1001); builder.SetIsimg(false); ByteString bs = ByteString.CopyFrom("ok", System.Text.Encoding.UTF8); builder.SetBuf(bs); per = builder.Build(); context.Response.ContentType = "application/protobuf"; context.Response.BinaryWrite(per.ToByteArray()); }
public void TestCodedInputOutputPosition() { byte[] content = new byte[110]; for (int i = 0; i < content.Length; i++) { content[i] = (byte)i; } byte[] child = new byte[120]; { MemoryStream ms = new MemoryStream(child); CodedOutputStream cout = CodedOutputStream.CreateInstance(ms, 20); // Field 11: numeric value: 500 cout.WriteTag(11, WireFormat.WireType.Varint); Assert.AreEqual(1, cout.Position); cout.WriteInt32NoTag(500); Assert.AreEqual(3, cout.Position); //Field 12: length delimited 120 bytes cout.WriteTag(12, WireFormat.WireType.LengthDelimited); Assert.AreEqual(4, cout.Position); cout.WriteBytesNoTag(ByteString.CopyFrom(content)); Assert.AreEqual(115, cout.Position); // Field 13: fixed numeric value: 501 cout.WriteTag(13, WireFormat.WireType.Fixed32); Assert.AreEqual(116, cout.Position); cout.WriteSFixed32NoTag(501); Assert.AreEqual(120, cout.Position); cout.Flush(); } byte[] bytes = new byte[130]; { CodedOutputStream cout = CodedOutputStream.CreateInstance(bytes); // Field 1: numeric value: 500 cout.WriteTag(1, WireFormat.WireType.Varint); Assert.AreEqual(1, cout.Position); cout.WriteInt32NoTag(500); Assert.AreEqual(3, cout.Position); //Field 2: length delimited 120 bytes cout.WriteTag(2, WireFormat.WireType.LengthDelimited); Assert.AreEqual(4, cout.Position); cout.WriteBytesNoTag(ByteString.CopyFrom(child)); Assert.AreEqual(125, cout.Position); // Field 3: fixed numeric value: 500 cout.WriteTag(3, WireFormat.WireType.Fixed32); Assert.AreEqual(126, cout.Position); cout.WriteSFixed32NoTag(501); Assert.AreEqual(130, cout.Position); cout.Flush(); } //Now test Input stream: { CodedInputStream cin = CodedInputStream.CreateInstance(new MemoryStream(bytes), new byte[50]); uint tag; int intValue = 0; string ignore; Assert.AreEqual(0, cin.Position); // Field 1: Assert.IsTrue(cin.ReadTag(out tag, out ignore) && tag >> 3 == 1); Assert.AreEqual(1, cin.Position); Assert.IsTrue(cin.ReadInt32(ref intValue) && intValue == 500); Assert.AreEqual(3, cin.Position); //Field 2: Assert.IsTrue(cin.ReadTag(out tag, out ignore) && tag >> 3 == 2); Assert.AreEqual(4, cin.Position); uint childlen = cin.ReadRawVarint32(); Assert.AreEqual(120u, childlen); Assert.AreEqual(5, cin.Position); int oldlimit = cin.PushLimit((int)childlen); Assert.AreEqual(5, cin.Position); // Now we are reading child message { // Field 11: numeric value: 500 Assert.IsTrue(cin.ReadTag(out tag, out ignore) && tag >> 3 == 11); Assert.AreEqual(6, cin.Position); Assert.IsTrue(cin.ReadInt32(ref intValue) && intValue == 500); Assert.AreEqual(8, cin.Position); //Field 12: length delimited 120 bytes Assert.IsTrue(cin.ReadTag(out tag, out ignore) && tag >> 3 == 12); Assert.AreEqual(9, cin.Position); ByteString bstr = null; Assert.IsTrue(cin.ReadBytes(ref bstr) && bstr.Length == 110 && bstr.ToByteArray()[109] == 109); Assert.AreEqual(120, cin.Position); // Field 13: fixed numeric value: 501 Assert.IsTrue(cin.ReadTag(out tag, out ignore) && tag >> 3 == 13); // ROK - Previously broken here, this returned 126 failing to account for bufferSizeAfterLimit Assert.AreEqual(121, cin.Position); Assert.IsTrue(cin.ReadSFixed32(ref intValue) && intValue == 501); Assert.AreEqual(125, cin.Position); Assert.IsTrue(cin.IsAtEnd); } cin.PopLimit(oldlimit); Assert.AreEqual(125, cin.Position); // Field 3: fixed numeric value: 501 Assert.IsTrue(cin.ReadTag(out tag, out ignore) && tag >> 3 == 3); Assert.AreEqual(126, cin.Position); Assert.IsTrue(cin.ReadSFixed32(ref intValue) && intValue == 501); Assert.AreEqual(130, cin.Position); Assert.IsTrue(cin.IsAtEnd); } }