{"id":1501,"date":"2009-11-27T17:07:36","date_gmt":"2009-11-27T15:07:36","guid":{"rendered":"http:\/\/firefang.net\/blog\/?p=1501"},"modified":"2009-11-27T17:15:39","modified_gmt":"2009-11-27T15:15:39","slug":"protobuf","status":"publish","type":"post","link":"https:\/\/firefang.net\/blog\/1501","title":{"rendered":"protobuf"},"content":{"rendered":"<p>\u05dc\u05e4\u05e0\u05d9 \u05e7\u05e6\u05ea \u05d9\u05d5\u05ea\u05e8 \u05de\u05e9\u05e0\u05d4 \u05d2\u05d5\u05d2\u05dc <a href=\"http:\/\/www.informationweek.com\/news\/internet\/google\/showArticle.jhtml?articleID=208803049\">\u05e9\u05d7\u05e8\u05e8\u05d5<\/a> \u05d1\u05e8\u05e9\u05d9\u05d5\u05df \u05e7\u05d5\u05d3 \u05e4\u05ea\u05d5\u05d7 \u05e4\u05e8\u05d5\u05d9\u05d9\u05e7\u05d8 \u05d1\u05e9\u05dd Protocol Buffers, \u05d5\u05d1\u05e7\u05d9\u05e6\u05d5\u05e8 <a href=\"http:\/\/code.google.com\/p\/protobuf\/\">protobuf<\/a>.<br \/>\nprotobuf \u05de\u05d2\u05d3\u05d9\u05e8 \u05e9\u05e4\u05d4 \u05dc\u05d4\u05d2\u05d3\u05e8\u05ea \u05de\u05d1\u05e0\u05d9 \u05e0\u05ea\u05d5\u05e0\u05d9\u05dd (IDL), \u05d5\u05d9\u05d5\u05d3\u05e2 \u05dc\u05d9\u05d9\u05e6\u05e8 \u05e7\u05d5\u05d3 \u05d9\u05e2\u05d9\u05dc \u05e9\u05e7\u05d5\u05e8\u05d0 \u05d5\u05db\u05d5\u05ea\u05d1 \u05d0\u05ea \u05d0\u05d5\u05ea\u05dd \u05de\u05d1\u05e0\u05d9 \u05e0\u05ea\u05d5\u05e0\u05d9\u05dd \u05d1C++, JAVA \u05d0\u05d5 \u05e4\u05d9\u05d9\u05ea\u05d5\u05df.<br \/>\n\u05d9\u05e9 \u05ea\u05de\u05d9\u05db\u05d4 \u05d7\u05d9\u05e6\u05d5\u05e0\u05d9\u05ea \u05dc\u05e4\u05d5\u05e8\u05de\u05d8 \u05d1\u05e9\u05e4\u05d5\u05ea \u05e0\u05d5\u05e1\u05e4\u05d5\u05ea, C#, D, \u05e8\u05d5\u05d1\u05d9 PHP* \u05d5\u05e2\u05d5\u05d3.<br \/>\n\u05d4\u05d3\u05d5\u05d2\u05de\u05d0\u05d5\u05ea \u05e9\u05d0\u05e0\u05d9 \u05d0\u05ea\u05df \u05d9\u05d4\u05d9\u05d5 \u05d1\u05d2'\u05d0\u05d5\u05d5\u05d4, \u05d0\u05d1\u05dc \u05d4\u05e9\u05ea\u05de\u05e9\u05ea\u05d9 \u05d1\u05d5 \u05d2\u05dd \u05e2\u05dd C++ \u05d5\u05d4\u05d5\u05d0 \u05e2\u05d5\u05d1\u05d3 \u05d4\u05d9\u05d8\u05d1 \u05d2\u05dd \u05e9\u05dd.<br \/>\n\u05db\u05dc \u05de\u05e4\u05ea\u05d7 \u05de\u05d2\u05d9\u05e2 \u05de\u05ea\u05d9 \u05e9\u05d4\u05d5\u05d0 \u05dc\u05e9\u05dc\u05d1 \u05e9\u05d1\u05d5 \u05ea\u05d5\u05db\u05e0\u05d9\u05ea \u05e9\u05d4\u05d5\u05d0 \u05db\u05d5\u05ea\u05d1 \u05e6\u05e8\u05d9\u05db\u05d4 \u05dc\u05d4\u05e2\u05d1\u05d9\u05e8 \u05e0\u05ea\u05d5\u05e0\u05d9\u05dd \u05dc\u05ea\u05d5\u05db\u05e0\u05d9\u05ea \u05d0\u05d7\u05e8\u05ea (\u05d0\u05d5 \u05dc\u05de\u05d5\u05e4\u05e2 \u05d0\u05d7\u05e8 \u05e9\u05dc \u05e2\u05e6\u05de\u05d4) \u05d3\u05e8\u05da \u05d4\u05e8\u05e9\u05ea, \u05d0\u05d5 \u05dc\u05e9\u05de\u05d5\u05e8 \u05e0\u05ea\u05d5\u05e0\u05d9\u05dd \u05dc\u05e7\u05d5\u05d1\u05e5 \u05db\u05d3\u05d9 \u05dc\u05e7\u05e8\u05d5\u05d0 \u05d0\u05d5\u05ea\u05dd \u05d0\u05d7\u05e8 \u05db\u05da.<br \/>\n\u05de\u05e7\u05d5\u05d1\u05dc \u05dc\u05e7\u05d5\u05d3\u05d3 \u05d0\u05ea \u05d4\u05e0\u05ea\u05d5\u05e0\u05d9\u05dd \u05d1\u05ea\u05d5\u05da \u05d4\u05d5\u05d3\u05e2\u05d5\u05ea, \u05db\u05e9\u05d9\u05e9 \u05d4\u05e8\u05d1\u05d4 \u05de\u05d0\u05d5\u05d3 \u05d3\u05e8\u05db\u05d9\u05dd \u05dc\u05db\u05ea\u05d5\u05d1 \u05d0\u05ea \u05d4\u05d4\u05d5\u05d3\u05e2\u05d5\u05ea, \u05d5\u05d1\u05d3\u05e8\u05da \u05db\u05dc\u05dc \u05de\u05d3\u05d5\u05d1\u05e8 \u05d1\u05e7\u05d5\u05d3 \u05d3\u05d9 \u05e1\u05d9\u05d6\u05d9\u05e4\u05d9 \u05e9\u05d7\u05d5\u05d6\u05e8 \u05e2\u05dc \u05e2\u05e6\u05de\u05d5 \u05d5\u05db\u05ea\u05d9\u05d1\u05ea\u05d5 \u05d4\u05d9\u05d0 \u05d3\u05d9 \u05de\u05e9\u05e2\u05de\u05de\u05ea (\u05d1\u05e4\u05e2\u05dd \u05d4\u05e2\u05e9\u05d9\u05e8\u05d9\u05ea \u05e9\u05e2\u05d5\u05e9\u05d9\u05dd \u05de\u05e9\u05d4\u05d5 \u05db\u05d6\u05d4).<br \/>\n\u05e0\u05e0\u05d9\u05d7 \u05e9\u05d0\u05e0\u05d7\u05e0\u05d5 \u05e8\u05d5\u05e6\u05d9\u05dd \u05dc\u05d4\u05e2\u05d1\u05d9\u05e8 \u05d0\u05d5\u05d1\u05d9\u05d9\u05e7\u05d8 \u05e9\u05de\u05d9\u05d9\u05e6\u05d2 \u05d0\u05d9\u05de\u05d9\u05d9\u05dc \u05e2\u05dc \u05d2\u05d1\u05d9 \u05d4\u05e8\u05e9\u05ea (\u05d5\u05e0\u05ea\u05e2\u05dc\u05dd \u05e8\u05d2\u05e2 \u05de\u05d4\u05e4\u05e8\u05d5\u05d8\u05d5\u05e7\u05d5\u05dc\u05d9\u05dd \u05d4\u05de\u05e7\u05d5\u05d1\u05dc\u05d9\u05dd \u05dc\u05d4\u05e2\u05d1\u05e8\u05ea \u05d0\u05d9\u05de\u05d9\u05d9\u05dc\u05d9\u05dd).<br \/>\n\u05dc\u05d0\u05d5\u05d1\u05d9\u05d9\u05e7\u05d8 \u05d0\u05d9\u05de\u05d9\u05d9\u05dc \u05e9\u05dc\u05e0\u05d5 \u05d9\u05e9 \u05e9\u05d3\u05d4 \u05e9\u05dc \u05e9\u05d5\u05dc\u05d7, \u05d0\u05d7\u05d3 \u05d0\u05d5 \u05d9\u05d5\u05ea\u05e8 \u05e9\u05d3\u05d5\u05ea \u05e9\u05dc \u05de\u05e7\u05d1\u05dc\u05d9\u05dd, \u05e0\u05d5\u05e9\u05d0, \u05d8\u05e7\u05e1\u05d8, \u05d5\u05d0\u05e4\u05e1 \u05d0\u05d5 \u05d9\u05d5\u05ea\u05e8 \u05e7\u05d1\u05e6\u05d9\u05dd \u05e0\u05dc\u05d5\u05d5\u05d9\u05dd \u05d5\u05d0\u05e4\u05d9\u05dc\u05d5 \u05e2\u05d3\u05d9\u05e4\u05d5\u05ea.<br \/>\n\u05d0\u05e4\u05e9\u05e8 \u05dc\u05d9\u05d9\u05e6\u05d2 \u05d0\u05d5\u05ea\u05d5 \u05d1\u05de\u05d1\u05e0\u05d4 \u05d4\u05dc\u05d5\u05d2\u05d9 \u05d4\u05d6\u05d4:<br \/>\n[code lang=&quot;java&quot;]<br \/>\npackage messages;<br \/>\nmessage Email<br \/>\n{<br \/>\n        enum Priority<br \/>\n        {<br \/>\n                LOW = 1;<br \/>\n                NORMAL = 2;<br \/>\n                HIGH = 3;<br \/>\n        }<\/p>\n<p>        required string from = 1;<br \/>\n        repeated string to = 2;<br \/>\n        required string subject = 3;<br \/>\n        required string message = 5;<br \/>\n        repeated Attachment attch = 4;<br \/>\n        optional Priority priority = 6;<br \/>\n        optional string date = 7;<\/p>\n<p>        message Attachment<br \/>\n        {<br \/>\n                optional string data = 1;<br \/>\n                required string name = 2;<br \/>\n        }<br \/>\n}<br \/>\n[\/code]<\/p>\n<p>\u05de\u05d4 \u05e9\u05d9\u05e9 \u05dc\u05e0\u05d5 \u05e4\u05d4 \u05d6\u05d4 \u05d4\u05d2\u05d3\u05e8\u05ea \u05d4\u05d5\u05d3\u05e2\u05d4 \u05ea\u05e7\u05d9\u05e0\u05d4 \u05d1\u05e9\u05e4\u05ea \u05d4IDL \u05e9\u05dc protobuf.<br \/>\n\u05d4\u05e9\u05e4\u05d4 \u05ea\u05d5\u05de\u05db\u05ea \u05d1\u05d4\u05d2\u05d3\u05e8\u05ea \u05d7\u05d1\u05d9\u05dc\u05d4 (\u05e9\u05de\u05ea\u05d5\u05e8\u05d2\u05de\u05ea \u05dcpackage \u05d1\u05d2'\u05d0\u05d5\u05d5\u05d4 \u05d5\u05dcnamespace \u05d1C++), \u05d5\u05db\u05df \u05d1\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05de\u05e7\u05d5\u05e0\u05e0\u05d5\u05ea \u05e9\u05dc \u05d4\u05d5\u05d3\u05e2\u05d5\u05ea.<br \/>\n\u05d4\u05de\u05e1\u05e4\u05e8\u05d9\u05dd \u05d0\u05d7\u05e8\u05d9 \u05db\u05dc \u05e9\u05d5\u05e8\u05d4 \u05e0\u05e7\u05e8\u05d0\u05d9\u05dd \u05d8\u05d0\u05d2\u05d9\u05dd \u05d5\u05de\u05e9\u05de\u05e9\u05d9\u05dd \u05dc\u05d6\u05d9\u05d4\u05d5\u05d9 \u05e9\u05dc \u05d4\u05e9\u05d3\u05d5\u05ea \u05d1\u05e4\u05e8\u05d5\u05d8\u05d5\u05e7\u05d5\u05dc \u05d4\u05d1\u05d9\u05e0\u05d0\u05e8\u05d9, \u05d5\u05dc\u05db\u05df \u05d0\u05d7\u05e8\u05d9 \u05e9\u05d4\u05dd \u05e0\u05e7\u05d1\u05e2\u05d9\u05dd \u05d0\u05d9 \u05d0\u05e4\u05e9\u05e8 \u05dc\u05e9\u05e0\u05d5\u05ea \u05d0\u05d5\u05ea\u05dd.<br \/>\n\u05d0\u05e4\u05e9\u05e8 \u05dc\u05e8\u05d0\u05d5\u05ea \u05e9\u05d4\u05e9\u05e4\u05d4 \u05ea\u05d5\u05de\u05db\u05ea \u05d1\u05d4\u05d2\u05d3\u05e8\u05d4 \u05e9\u05dc enum, \u05d5\u05db\u05df \u05d1\u05e8\u05e9\u05d9\u05de\u05d5\u05ea \u05e9\u05dc \u05d0\u05d5\u05d1\u05d9\u05d9\u05e7\u05d8\u05d9\u05dd (\u05e9\u05d9\u05db\u05d5\u05dc\u05d9\u05dd \u05d1\u05e2\u05e6\u05de\u05dd \u05dc\u05d4\u05db\u05d9\u05dc \u05d0\u05d5\u05d1\u05d9\u05d9\u05e7\u05d8\u05d9\u05dd \u05d5\u05db\u05df \u05d4\u05dc\u05d0\u05d4).<br \/>\n\u05d7\u05d5\u05e5 \u05de\u05d8\u05d9\u05e4\u05d5\u05e1\u05d9\u05dd \u05e9\u05d0\u05ea\u05dd \u05de\u05d2\u05d3\u05d9\u05e8\u05d9\u05dd, \u05d4\u05e9\u05e4\u05d4 \u05ea\u05d5\u05de\u05db\u05ea \u05d2\u05dd <a href=\"http:\/\/code.google.com\/apis\/protocolbuffers\/docs\/proto.html#scalar\">\u05d1\u05d8\u05d9\u05e4\u05d5\u05e1\u05d9\u05dd \u05e4\u05e0\u05d9\u05de\u05d9\u05d9\u05dd<\/a> \u05dc\u05de\u05e9\u05dc \u05de\u05d7\u05e8\u05d5\u05d6\u05ea, \u05de\u05e9\u05ea\u05e0\u05d4 \u05d1\u05d5\u05dc\u05d9\u05d0\u05e0\u05d9, \u05de\u05e1\u05e4\u05e8 \u05d1\u05e8\u05d5\u05d7\u05d1 \u05e7\u05d1\u05d5\u05e2 (\u05dc\u05de\u05e9\u05dc \u05d0\u05e8\u05d1\u05e2\u05d4 \u05d1\u05ea\u05d9\u05dd), \u05de\u05e1\u05e4\u05e8 \u05d1\u05e8\u05d5\u05d7\u05d1 \u05de\u05e9\u05ea\u05e0\u05d4 \u05d5\u05e2\u05d5\u05d3.<br \/>\n\u05d4\u05de\u05e1\u05e4\u05e8\u05d9\u05dd \u05d1\u05e8\u05d5\u05d7\u05d1 \u05de\u05e9\u05ea\u05e0\u05d4 \u05de\u05e7\u05d5\u05d3\u05d3\u05d9\u05dd \u05d1\u05e6\u05d5\u05e8\u05d4 \u05d3\u05d5\u05de\u05d4 \u05e7\u05e6\u05ea <a title=\"\u05dc\u05e7\u05d9\u05d3\u05d5\u05d3 \u05e9\u05dc UTF8\" href=\"http:\/\/firefang.net\/blog\/818\">\u05dc\u05e7\u05d9\u05d3\u05d5\u05d3 \u05e9\u05dc UTF8<\/a>, \u05d0\u05d1\u05dc \u05d1\u05e6\u05d5\u05e8\u05d4 \u05e7\u05e6\u05ea \u05d9\u05d5\u05ea\u05e8 \u05e4\u05e9\u05d5\u05d8\u05d4:<\/p>\n<p>\u05d4\u05d1\u05d9\u05d8 \u05d4\u05e9\u05de\u05d0\u05dc\u05d9 (MSB) \u05d1\u05db\u05dc \u05d1\u05d9\u05d9\u05d8 \u05de\u05d5\u05d2\u05d3\u05e8 \u05db\u05da: 1 \u05d0\u05dd \u05d4\u05de\u05e1\u05e4\u05e8 \u05d4\u05de\u05d5\u05e2\u05d1\u05e8 \u05db\u05d5\u05dc\u05dc \u05d1\u05d9\u05d9\u05d8\u05d9\u05dd \u05e0\u05d5\u05e1\u05e4\u05d9\u05dd, \u05d0\u05d5 0 \u05d0\u05dd \u05d6\u05d4 \u05e1\u05d5\u05e3 \u05d4\u05de\u05e1\u05e4\u05e8.<br \/>\n7 \u05d4\u05d1\u05d9\u05d8\u05d9\u05dd \u05d4\u05d0\u05d7\u05e8\u05d9\u05dd \u05d1\u05db\u05dc \u05d1\u05d9\u05d9\u05d8 \u05de\u05e9\u05de\u05e9\u05d9\u05dd \u05dc\u05d4\u05e2\u05d1\u05e8\u05ea 7 \u05d1\u05d9\u05d8\u05d9\u05dd \u05e9\u05dc \u05d4\u05de\u05e1\u05e4\u05e8 \u05e2\u05e6\u05de\u05d5. \u05d1\u05e6\u05d5\u05e8\u05d4 \u05db\u05d6\u05d5, \u05de\u05e1\u05e4\u05e8\u05d9\u05dd \u05e7\u05d8\u05e0\u05d9\u05dd \u05de128 \u05d9\u05ea\u05e4\u05e1\u05d5 \u05d1\u05d9\u05d9\u05d8 \u05d0\u05d7\u05d3 \u05d1\u05dc\u05d1\u05d3, \u05de\u05e1\u05e4\u05e8\u05d9\u05dd \u05e7\u05d8\u05e0\u05d9\u05dd \u05de65000 \u05d1\u05e7\u05d9\u05e8\u05d5\u05d1 \u05d9\u05ea\u05e4\u05e1\u05d5 \u05e9\u05e0\u05d9 \u05d1\u05ea\u05d9\u05dd \u05d5\u05db\u05df \u05d4\u05dc\u05d0\u05d4. \u05d0\u05dd \u05d4\u05ea\u05d5\u05db\u05e0\u05d9\u05ea \u05e9\u05dc\u05db\u05dd \u05de\u05e2\u05d1\u05d9\u05e8\u05d4 \u05de\u05e1\u05e4\u05e8\u05d9\u05dd \u05e7\u05d8\u05e0\u05d9\u05dd \u05e9\u05d9\u05db\u05d5\u05dc\u05d9\u05dd \u05dc\u05d4\u05d9\u05d5\u05ea \u05d2\u05d3\u05d5\u05dc\u05d9\u05dd \u05dc\u05e2\u05d9\u05ea\u05d9\u05dd \u05e0\u05d3\u05d9\u05e8\u05d5\u05ea &#8211; \u05d4\u05e7\u05d9\u05d3\u05d5\u05d3 \u05d4\u05d6\u05d4 \u05d4\u05d5\u05d0 \u05d0\u05d9\u05d3\u05d9\u05d0\u05dc\u05d9 \u05db\u05d9 \u05d1\u05d3\u05e8\u05da \u05db\u05dc\u05dc \u05d4\u05de\u05e1\u05e4\u05e8\u05d9\u05dd \u05dc\u05d0 \u05d9\u05ea\u05e4\u05e1\u05d5 \u05d4\u05e8\u05d1\u05d4 \u05de\u05e7\u05d5\u05dd, \u05d1\u05e0\u05d9\u05d2\u05d5\u05d3 \u05dc\u05e7\u05d9\u05d3\u05d5\u05d3 \u05d1\u05e8\u05d5\u05d7\u05d1 \u05e7\u05d1\u05d5\u05e2 \u05e9\u05d1\u05d5 \u05db\u05dc \u05de\u05e1\u05e4\u05e8 \u05ea\u05d5\u05e4\u05e1 \u05dc\u05de\u05e9\u05dc \u05d0\u05e8\u05d1\u05e2\u05d4 \u05d1\u05ea\u05d9\u05dd.<\/p>\n<p>\u05d7\u05dc\u05e7 \u05de\u05d4\u05d8\u05d9\u05e4\u05d5\u05e1\u05d9\u05dd \u05d4\u05e0\u05ea\u05de\u05db\u05d9\u05dd \u05d1\u05e9\u05e4\u05d4 \u05d4\u05dd \u05d1\u05e8\u05d5\u05d7\u05d1 \u05e7\u05d1\u05d5\u05e2, \u05dc\u05de\u05e9\u05dc \u05de\u05e1\u05e4\u05e8\u05d9\u05dd \u05d1\u05e0\u05e7\u05d5\u05d3\u05d4 \u05e6\u05e4\u05d4 (Floating point) \u05d5\u05e9\u05dc\u05de\u05d9\u05dd \u05e9\u05de\u05d5\u05d2\u05d3\u05e8\u05d9\u05dd \u05dbFIXED, \u05dc\u05de\u05e9\u05dc FIXED64 \u05d9\u05d4\u05d9\u05d4 \u05ea\u05de\u05d9\u05d3 64 \u05d1\u05d9\u05d8\u05d9\u05dd \u05d0\u05d5 8 \u05d1\u05ea\u05d9\u05dd.<br \/>\n\u05e2\u05d5\u05d3 \u05e2\u05dc \u05d4\u05e9\u05e4\u05d4 \u05d0\u05e4\u05e9\u05e8 \u05dc\u05e7\u05e8\u05d5\u05d0 <a href=\"http:\/\/code.google.com\/apis\/protocolbuffers\/docs\/proto.html\">\u05e4\u05d4<\/a>.<\/p>\n<p>\u05d0\u05ea \u05d4\u05e7\u05d5\u05d1\u05e5 \u05e9\u05de\u05db\u05d9\u05dc \u05d0\u05ea \u05d4\u05d2\u05d3\u05e8\u05ea \u05d4\u05d4\u05d5\u05d3\u05e2\u05d5\u05ea &quot;\u05de\u05e7\u05de\u05e4\u05dc\u05d9\u05dd&quot; \u05e2\u05dd protoc, \u05e9\u05de\u05d9\u05d9\u05e6\u05e8 \u05de\u05de\u05e0\u05d5 \u05e7\u05d5\u05d3 \u05d1\u05d2'\u05d0\u05d5\u05d5\u05d4 C++ \u05d0\u05d5 \u05e4\u05d9\u05d9\u05ea\u05d5\u05df:<br \/>\n[CODE]<br \/>\n$ protoc messages.proto  &#8211;java_out src\/<br \/>\n[\/CODE]<\/p>\n<p>\u05d4\u05e0\u05d4 \u05d3\u05d5\u05d2\u05de\u05d0 \u05dc\u05e7\u05d5\u05d3 \u05d2'\u05d0\u05d5\u05d5\u05d4 \u05e9\u05de\u05d9\u05d9\u05e6\u05e8 \u05d4\u05d5\u05d3\u05e2\u05d4, \u05db\u05d5\u05ea\u05d1 \u05d0\u05d5\u05ea\u05d4 \u05dc\u05e7\u05d5\u05d1\u05e5, \u05e7\u05d5\u05e8\u05d0 \u05d0\u05d5\u05ea\u05d4 \u05d5\u05de\u05d3\u05e4\u05d9\u05e1 \u05d0\u05d5\u05ea\u05d4 \u05d1\u05e4\u05d5\u05e8\u05de\u05d8 \u05d8\u05e7\u05e1\u05d8\u05d5\u05d0\u05dc\u05d9:<br \/>\n[CODE LANG=&quot;JAVA&quot;]<br \/>\nimport java.io.FileInputStream;<br \/>\nimport java.io.FileNotFoundException;<br \/>\nimport java.io.FileOutputStream;<br \/>\nimport java.io.IOException;<\/p>\n<p>import test.Messages.Email;<br \/>\nimport test.Messages.Email.Attachment;<br \/>\nimport test.Messages.Email.Builder;<\/p>\n<p>class Test<br \/>\n{<br \/>\n    public static void main (String args[]) throws FileNotFoundException, IOException<br \/>\n    {<br \/>\n        Builder b = Email.newBuilder();<br \/>\n        b.addTo(&quot;test@abc.com&quot;);<br \/>\n        b.addTo(&quot;test@loogle.com&quot;);<br \/>\n        b.setFrom(&quot;someone@there.com&quot;);<br \/>\n        Attachment aa = Attachment.newBuilder().setName(&quot;viruts.exe&quot;).build();<br \/>\n        b.addAttch(aa);<br \/>\n        b.setSubject(&quot;A present for you&quot;);<br \/>\n        b.setMessage(&quot;Please open the attached Virus&quot;);<br \/>\n        Email email = b.build();<br \/>\n        System.out.println(email.toString());<br \/>\n        FileOutputStream out = new FileOutputStream(&quot;email.dat&quot;);<br \/>\n        email.writeTo(out);<br \/>\n        out.close();<\/p>\n<p>        System.out.println(Email.parseFrom(new FileInputStream(&quot;email.dat&quot;)));<br \/>\n    }<br \/>\n}<br \/>\n[\/CODE]<br \/>\n\u05e0\u05e7\u05de\u05e4\u05dc \u05d5\u05e0\u05e8\u05d9\u05e5:<br \/>\n[code lang=&quot;bash&quot;]<br \/>\n$ javac -cp lib\/protobuf-java-2.2.0.jar src\/Test.java src\/test\/Messages.java<br \/>\n$ java -cp lib\/protobuf-java-2.2.0.jar:src Test<br \/>\nfrom: &quot;someone@there.com&quot;<br \/>\nto: &quot;test@abc.com&quot;<br \/>\nto: &quot;test@loogle.com&quot;<br \/>\nsubject: &quot;A present for you&quot;<br \/>\nattch {<br \/>\n  name: &quot;viruts.exe&quot;<br \/>\n}<br \/>\nmessage: &quot;Please open the attached Virus&quot;<br \/>\n[\/code]<\/p>\n<p>\u05d0\u05e4\u05e9\u05e8 \u05dc\u05e8\u05d0\u05d5\u05ea \u05e9\u05d1\u05de\u05e4\u05ea\u05d9\u05e2 \u05d4\u05e4\u05dc\u05d8 \u05d4\u05d8\u05e7\u05e1\u05d8\u05d5\u05d0\u05dc\u05d9 \u05d4\u05d5\u05d0 \u05db\u05de\u05e2\u05d8 \u05e7\u05d5\u05d1\u05e5 <a href=\"http:\/\/firefang.net\/blog\/1331\">Swush<\/a> \u05ea\u05e7\u05e0\u05d9, \u05d0\u05e0\u05d9 \u05e0\u05e9\u05d1\u05e2 \u05e9\u05dc\u05d0 \u05d4\u05e1\u05ea\u05db\u05dc\u05ea\u05d9 \u05e2\u05dc\u05d9\u05d5 \u05db\u05e9\u05d4\u05d2\u05d3\u05e8\u05ea\u05d9 \u05d0\u05ea Swush \ud83d\ude42<br \/>\n\u05d6\u05d5 \u05d3\u05d5\u05d2\u05de\u05d0 \u05dc\u05e9\u05d9\u05de\u05d5\u05e9 \u05d1protobuf \u05d1\u05d2'\u05d0\u05d5\u05d5\u05d4, \u05d4\u05e9\u05d9\u05de\u05d5\u05e9 \u05d1C++ \u05d1\u05e9\u05e4\u05d5\u05ea \u05d0\u05d7\u05e8\u05d5\u05ea \u05e4\u05e9\u05d5\u05d8 \u05d1\u05e6\u05d5\u05e8\u05d4 \u05d3\u05d5\u05de\u05d4.<br \/>\n\u05db\u05dc \u05d4\u05e2\u05e0\u05d9\u05d9\u05df \u05de\u05d0\u05d5\u05d3 \u05e7\u05dc \u05dc\u05e9\u05d9\u05de\u05d5\u05e9, \u05d5\u05d0\u05e0\u05d9 \u05de\u05de\u05dc\u05d9\u05e5 \u05de\u05d0\u05d5\u05d3 \u05dc\u05db\u05dc \u05de\u05d9 \u05e9\u05e6\u05e8\u05d9\u05da \u05dc\u05db\u05ea\u05d5\u05d1 \u05d0\u05d5\u05d1\u05d9\u05d9\u05e7\u05d8\u05d9\u05dd \u05dc\u05e7\u05d5\u05d1\u05e5 \u05d0\u05d5 \u05dc\u05e8\u05e9\u05ea \u05dc\u05d1\u05d3\u05d5\u05e7 \u05d0\u05ea protobu.<br \/>\n\u05d0\u05d2\u05d1, \u05d4\u05e7\u05d5\u05d3 \u05d4\u05de\u05d7\u05d5\u05dc\u05dc \u05e0\u05e8\u05d0\u05d4 \u05d8\u05d5\u05d1 \u05de\u05d0\u05d5\u05d3, \u05db\u05de\u05e2\u05d8 \u05db\u05d0\u05d9\u05dc\u05d5 \u05db\u05ea\u05d1\u05ea\u05dd \u05d0\u05d5\u05ea\u05d5 \u05d1\u05e2\u05e6\u05de\u05db\u05dd.<\/p>\n<p>* PHP : \u05d4\u05e1\u05e4\u05e8\u05d9\u05d4 \u05dc\u05ea\u05de\u05d9\u05db\u05d4 \u05d1PHP \u05d4\u05d9\u05d0 <a href=\"http:\/\/code.google.com\/p\/pb4php\/\">pb4php<\/a>, \u05d5\u05d4\u05d9\u05d0 \u05dc\u05d0 \u05de\u05d0\u05d5\u05d3 \u05de\u05d5\u05e6\u05dc\u05d7\u05ea. \u05dc\u05de\u05e8\u05d5\u05ea \u05e9\u05d9\u05ea\u05db\u05df \u05e9\u05d1\u05e7\u05e8\u05d5\u05d1 \u05d4\u05e4\u05e8\u05d5\u05d9\u05d9\u05e7\u05d8 \u05d9\u05e7\u05d1\u05dc PATCH \u05de\u05e9\u05de\u05e2\u05d5\u05ea\u05d9 \u05e9\u05d4\u05d5\u05e4\u05da \u05d0\u05ea \u05d4\u05e1\u05e4\u05e8\u05d9\u05d4 \u05dc\u05d9\u05d5\u05ea\u05e8 \u05e9\u05de\u05d9\u05e9\u05d4 (\u05dc\u05e4\u05d7\u05d5\u05ea \u05dc\u05e6\u05e8\u05db\u05d9\u05dd \u05e9\u05dc\u05d9).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u05dc\u05e4\u05e0\u05d9 \u05e7\u05e6\u05ea \u05d9\u05d5\u05ea\u05e8 \u05de\u05e9\u05e0\u05d4 \u05d2\u05d5\u05d2\u05dc \u05e9\u05d7\u05e8\u05e8\u05d5 \u05d1\u05e8\u05e9\u05d9\u05d5\u05df \u05e7\u05d5\u05d3 \u05e4\u05ea\u05d5\u05d7 \u05e4\u05e8\u05d5\u05d9\u05d9\u05e7\u05d8 \u05d1\u05e9\u05dd Protocol Buffers, \u05d5\u05d1\u05e7\u05d9\u05e6\u05d5\u05e8 protobuf. protobuf \u05de\u05d2\u05d3\u05d9\u05e8 \u05e9\u05e4\u05d4 \u05dc\u05d4\u05d2\u05d3\u05e8\u05ea \u05de\u05d1\u05e0\u05d9 \u05e0\u05ea\u05d5\u05e0\u05d9\u05dd (IDL), \u05d5\u05d9\u05d5\u05d3\u05e2 \u05dc\u05d9\u05d9\u05e6\u05e8 \u05e7\u05d5\u05d3 \u05d9\u05e2\u05d9\u05dc \u05e9\u05e7\u05d5\u05e8\u05d0 \u05d5\u05db\u05d5\u05ea\u05d1 \u05d0\u05ea \u05d0\u05d5\u05ea\u05dd \u05de\u05d1\u05e0\u05d9 \u05e0\u05ea\u05d5\u05e0\u05d9\u05dd \u05d1C++, JAVA \u05d0\u05d5 \u05e4\u05d9\u05d9\u05ea\u05d5\u05df. \u05d9\u05e9 \u05ea\u05de\u05d9\u05db\u05d4 \u05d7\u05d9\u05e6\u05d5\u05e0\u05d9\u05ea \u05dc\u05e4\u05d5\u05e8\u05de\u05d8 \u05d1\u05e9\u05e4\u05d5\u05ea \u05e0\u05d5\u05e1\u05e4\u05d5\u05ea, C#, D, \u05e8\u05d5\u05d1\u05d9 PHP* \u05d5\u05e2\u05d5\u05d3. \u05d4\u05d3\u05d5\u05d2\u05de\u05d0\u05d5\u05ea \u05e9\u05d0\u05e0\u05d9 \u05d0\u05ea\u05df \u05d9\u05d4\u05d9\u05d5 \u05d1\u05d2'\u05d0\u05d5\u05d5\u05d4, \u05d0\u05d1\u05dc \u05d4\u05e9\u05ea\u05de\u05e9\u05ea\u05d9 \u05d1\u05d5 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/firefang.net\/blog\/1501\" class=\"more-link\">\u05dc\u05d4\u05de\u05e9\u05d9\u05da \u05dc\u05e7\u05e8\u05d5\u05d0<span class=\"screen-reader-text\"> protobuf<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,17,7],"tags":[73,91],"class_list":["post-1501","post","type-post","status-publish","format-standard","hentry","category-java","category-open-soruce","category-programming","tag-google","tag-protobuf"],"_links":{"self":[{"href":"https:\/\/firefang.net\/blog\/wp-json\/wp\/v2\/posts\/1501","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/firefang.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/firefang.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/firefang.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/firefang.net\/blog\/wp-json\/wp\/v2\/comments?post=1501"}],"version-history":[{"count":11,"href":"https:\/\/firefang.net\/blog\/wp-json\/wp\/v2\/posts\/1501\/revisions"}],"predecessor-version":[{"id":1511,"href":"https:\/\/firefang.net\/blog\/wp-json\/wp\/v2\/posts\/1501\/revisions\/1511"}],"wp:attachment":[{"href":"https:\/\/firefang.net\/blog\/wp-json\/wp\/v2\/media?parent=1501"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/firefang.net\/blog\/wp-json\/wp\/v2\/categories?post=1501"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/firefang.net\/blog\/wp-json\/wp\/v2\/tags?post=1501"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}