Кто-нибудь знает о проекте для реализации буферов протокола Google в Delphi?Буферы протокола Delphi?
ответ
Этот проект содержит реализацию протокольных буферов для Delphi. Из проекта была реализована ограниченная функциональность, необходимая для конкретного проекта. В то время я не вижу смысла передавать весь код проекта. http://sourceforge.net/projects/protobuf-delphi/
и не был затронут снова с 2011 года. См. Ниже для ответа на основные вопросы, который по-прежнему активно поддерживается. –
Версия 1.1 выпущена в апреле 2013 года. –
Возможно, вам лучше найти/создать мост C++/Delphi, а не повторять реализацию буферов протокола. Кодовая база довольно большая.
Интересно, что вы думаете об использовании либо JSON, либо BSON похоже на незавершенное производство) в качестве протокола.
Похоже, что буферы протокола более функциональны, поскольку они позволяют, например, добавлять дополнительные элементы, поэтому он ближе к протоколу XML + XSD/WSDL/SOAP, чем к формату сериализации – mjn
Здесь:
Основы протокола Буферы 4.00.01 (10 фев 2013)
Google протокола Буферы
Появляется для активного обслуживания. +1 для этого, тогда как принятый ответ кажется замороженным и никогда не касался с 2011 года. –
Я нашел another one на GitHub. (с февраля 2014 года по июль 2016 года)
Кажется, что preliminary proto3 support.
Я еще не тестировал, но на сегодняшний день это может быть лучшим.
https://github.com/stijnsanders/DelphiProtocolBuffer
EDIT: Я испытал это, но это, кажется, написано в старых Дельфах и не Юникод.
Я мог бы составить генератор (используя 10 Сиэтл), но скомпилирован ехе не удалось создать файл па :-(
edit2:
Генератор кода работает только замена TStream на TStreamReader/Writer . Я подтвердил, генератор может преобразовать недавнюю address book sample.
diff --git a/ProtBufParse.pas b/ProtBufParse.pas
index f29d7c7..cdd734d 100644
--- a/ProtBufParse.pas
+++ b/ProtBufParse.pas
@@ -236,16 +236,13 @@ var
procedure LoadCode;
var
- f:TFileStream;
+ sr:TStreamReader;
begin
- f:=TFileStream.Create(FilePath,fmOpenRead or fmShareDenyWrite);
+ sr:=TStreamReader.Create(FilePath, True{DetectBOM});
try
- //TODO: UTF-8? UTF-16?
- CodeL:=f.Size;
- SetLength(Code,CodeL);
- if f.Read(Code[1],CodeL)<>CodeL then RaiseLastOSError;
+ Code := sr.ReadToEnd;
finally
- f.Free;
+ sr.Free;
end;
end;
diff --git a/dpbp.dpr b/dpbp.dpr
index 4049480..b6dab90 100644
--- a/dpbp.dpr
+++ b/dpbp.dpr
@@ -22,7 +22,7 @@ var
p:TProtocolBufferParser;
s,t,InputFN,OutputFN,RelPath:string;
i,j,l,l1:integer;
- f:TFileStream;
+ sw:TStreamWriter;
fv:TProtocolBufferParserValue;
ff:TProtocolBufferParserFlag;
Flags:TProtocolBufferParserFlags;
@@ -134,11 +134,12 @@ begin
writeln('Writing '+OutputFN);
s:=p.GenerateUnit(Flags);
- f:=TFileStream.Create(OutputFN,fmCreate);
+
+ sw:=TStreamWriter.Create(OutputFN,False,TEncoding.UTF8);
try
- f.Write(s[1],Length(s));
+ sw.Write(s);
finally
- f.Free;
+ sw.Free;
end;
finally
не похоже, что трудно иметь пойти на это сам (сам?), это только время (время !!) Если бы я был несколько часов больше в день. –
Аминь! Хотел помочь и не начинать с нуля. –
Сайт протокольных буферов: http://code.google.com/p/protobuf/ protobuf-net - это реализация .net: http://code.google.com/p/protobuf-net/ Основываясь на над ним должно быть больше работы, чем я думал раньше. Я хотел бы получить версию win32 или non .net в Delphi. –