fix several issues
This commit is contained in:
parent
acaa9407e3
commit
c415a1445b
@ -7,12 +7,12 @@ namespace google {
|
|||||||
namespace protobuf {
|
namespace protobuf {
|
||||||
namespace util {
|
namespace util {
|
||||||
|
|
||||||
bool SerializeDelimitedToFileDescriptor(const Message* message, int file_descriptor) {
|
bool SerializeDelimitedToFileDescriptor(const MessageLite& message, int file_descriptor) {
|
||||||
io::FileOutputStream output(file_descriptor);
|
io::FileOutputStream output(file_descriptor);
|
||||||
return SerializeDelimitedToZeroCopyStream(message, &output);
|
return SerializeDelimitedToZeroCopyStream(message, &output);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SerializeDelimitedToOstream(const Message* message, ostream* output) {
|
bool SerializeDelimitedToOstream(const MessageLite& message, ostream* output) {
|
||||||
{
|
{
|
||||||
io::OstreamOutputStream zero_copy_output(output);
|
io::OstreamOutputStream zero_copy_output(output);
|
||||||
if (!SerializeDelimitedToZeroCopyStream(message, &zero_copy_output)) return false;
|
if (!SerializeDelimitedToZeroCopyStream(message, &zero_copy_output)) return false;
|
||||||
@ -49,14 +49,14 @@ bool ParseDelimitedFromCodedStream(MessageLite* message, io::CodedInputStream* i
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SerializeDelimitedToZeroCopyStream(const MessageLite* message, io::ZeroCopyOutputStream* output) {
|
bool SerializeDelimitedToZeroCopyStream(const MessageLite& message, io::ZeroCopyOutputStream* output) {
|
||||||
google::protobuf::io::CodedOutputStream coded_output(output);
|
google::protobuf::io::CodedOutputStream coded_output(output);
|
||||||
return SerializeDelimitedToCodedStream(message, &coded_output);
|
return SerializeDelimitedToCodedStream(message, &coded_output);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SerializeDelimitedToCodedStream(const MessageLite* message, io::CodedOutputStream* output) {
|
bool SerializeDelimitedToCodedStream(const MessageLite& message, io::CodedOutputStream* output) {
|
||||||
// Write the size.
|
// Write the size.
|
||||||
int size = message->ByteSize();
|
int size = message.ByteSize();
|
||||||
output->WriteVarint32(size);
|
output->WriteVarint32(size);
|
||||||
|
|
||||||
// Write the content.
|
// Write the content.
|
||||||
@ -64,10 +64,10 @@ bool SerializeDelimitedToCodedStream(const MessageLite* message, io::CodedOutput
|
|||||||
if (buffer != NULL) {
|
if (buffer != NULL) {
|
||||||
// Optimization: The message fits in one buffer, so use the faster
|
// Optimization: The message fits in one buffer, so use the faster
|
||||||
// direct-to-array serialization path.
|
// direct-to-array serialization path.
|
||||||
message->SerializeWithCachedSizesToArray(buffer);
|
message.SerializeWithCachedSizesToArray(buffer);
|
||||||
} else {
|
} else {
|
||||||
// Slightly-slower path when the message is multiple buffers.
|
// Slightly-slower path when the message is multiple buffers.
|
||||||
message->SerializeWithCachedSizes(output);
|
message.SerializeWithCachedSizes(output);
|
||||||
if (output->HadError()) return false;
|
if (output->HadError()) return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
|
|
||||||
#include <google/protobuf/message.h>
|
#include <google/protobuf/message_lite.h>
|
||||||
#include <google/protobuf/io/coded_stream.h>
|
#include <google/protobuf/io/coded_stream.h>
|
||||||
#include <google/protobuf/io/zero_copy_stream_impl.h>
|
#include <google/protobuf/io/zero_copy_stream_impl.h>
|
||||||
|
|
||||||
@ -23,16 +23,16 @@ namespace util {
|
|||||||
// Note that if you want to *read* a delimited message from a file descriptor
|
// Note that if you want to *read* a delimited message from a file descriptor
|
||||||
// or istream, you will need to construct an io::FileInputStream or
|
// or istream, you will need to construct an io::FileInputStream or
|
||||||
// io::OstreamInputStream (implementations of io::ZeroCopyStream) and use the
|
// io::OstreamInputStream (implementations of io::ZeroCopyStream) and use the
|
||||||
// MessageLite method ParseDelimitedFromZeroCopyStream(). You must then
|
// utility function ParseDelimitedFromZeroCopyStream(). You must then
|
||||||
// continue to use the same ZeroCopyInputStream to read all further data from
|
// continue to use the same ZeroCopyInputStream to read all further data from
|
||||||
// the stream until EOF. This is because these ZeroCopyInputStream
|
// the stream until EOF. This is because these ZeroCopyInputStream
|
||||||
// implementations are buffered: they read a big chunk of data at a time,
|
// implementations are buffered: they read a big chunk of data at a time,
|
||||||
// then parse it. As a result, they may read past the end of the delimited
|
// then parse it. As a result, they may read past the end of the delimited
|
||||||
// message. There is no way for them to push the extra data back into the
|
// message. There is no way for them to push the extra data back into the
|
||||||
// underlying source, so instead you must keep using the same stream object.
|
// underlying source, so instead you must keep using the same stream object.
|
||||||
bool LIBPROTOBUF_EXPORT SerializeDelimitedToFileDescriptor(const Message* message, int file_descriptor);
|
bool LIBPROTOBUF_EXPORT SerializeDelimitedToFileDescriptor(const MessageLite& message, int file_descriptor);
|
||||||
|
|
||||||
bool LIBPROTOBUF_EXPORT SerializeDelimitedToOstream(const Message* message, ostream* output);
|
bool LIBPROTOBUF_EXPORT SerializeDelimitedToOstream(const MessageLite& message, ostream* output);
|
||||||
|
|
||||||
// Read a single size-delimited message from the given stream. Delimited
|
// Read a single size-delimited message from the given stream. Delimited
|
||||||
// format allows a single file or stream to contain multiple messages,
|
// format allows a single file or stream to contain multiple messages,
|
||||||
@ -55,9 +55,9 @@ bool LIBPROTOBUF_EXPORT ParseDelimitedFromCodedStream(MessageLite* message, io::
|
|||||||
// whereas normally writing multiple non-delimited messages to the same
|
// whereas normally writing multiple non-delimited messages to the same
|
||||||
// stream would cause them to be merged. A delimited message is a varint
|
// stream would cause them to be merged. A delimited message is a varint
|
||||||
// encoding the message size followed by a message of exactly that size.
|
// encoding the message size followed by a message of exactly that size.
|
||||||
bool LIBPROTOBUF_EXPORT SerializeDelimitedToZeroCopyStream(const MessageLite* message, io::ZeroCopyOutputStream* output);
|
bool LIBPROTOBUF_EXPORT SerializeDelimitedToZeroCopyStream(const MessageLite& message, io::ZeroCopyOutputStream* output);
|
||||||
|
|
||||||
bool LIBPROTOBUF_EXPORT SerializeDelimitedToCodedStream(const MessageLite* message, io::CodedOutputStream* output);
|
bool LIBPROTOBUF_EXPORT SerializeDelimitedToCodedStream(const MessageLite& message, io::CodedOutputStream* output);
|
||||||
|
|
||||||
} // namespace util
|
} // namespace util
|
||||||
} // namespace protobuf
|
} // namespace protobuf
|
||||||
|
@ -20,11 +20,11 @@ TEST(MessageTest, DelimitedMessages) {
|
|||||||
{
|
{
|
||||||
protobuf_unittest::TestAllTypes message1;
|
protobuf_unittest::TestAllTypes message1;
|
||||||
TestUtil::SetAllFields(&message1);
|
TestUtil::SetAllFields(&message1);
|
||||||
EXPECT_TRUE(SerializeDelimitedToOstream(&message1, &stream));
|
EXPECT_TRUE(SerializeDelimitedToOstream(message1, &stream));
|
||||||
|
|
||||||
protobuf_unittest::TestPackedTypes message2;
|
protobuf_unittest::TestPackedTypes message2;
|
||||||
TestUtil::SetPackedFields(&message2);
|
TestUtil::SetPackedFields(&message2);
|
||||||
EXPECT_TRUE(SerializeDelimitedToOstream(&message2, &stream));
|
EXPECT_TRUE(SerializeDelimitedToOstream(message2, &stream));
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user