|
@@ -33,12 +33,15 @@ package com.google.protocolbuffers;
|
|
import java.io.ByteArrayInputStream;
|
|
import java.io.ByteArrayInputStream;
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.io.File;
|
|
import java.io.File;
|
|
|
|
+import java.io.FileOutputStream;
|
|
|
|
+import java.io.FileNotFoundException;
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
import java.io.RandomAccessFile;
|
|
import java.io.RandomAccessFile;
|
|
import java.lang.reflect.Method;
|
|
import java.lang.reflect.Method;
|
|
|
|
|
|
import com.google.protobuf.ByteString;
|
|
import com.google.protobuf.ByteString;
|
|
import com.google.protobuf.CodedInputStream;
|
|
import com.google.protobuf.CodedInputStream;
|
|
|
|
+import com.google.protobuf.CodedOutputStream;
|
|
import com.google.protobuf.Message;
|
|
import com.google.protobuf.Message;
|
|
|
|
|
|
public class ProtoBench {
|
|
public class ProtoBench {
|
|
@@ -88,6 +91,16 @@ public class ProtoBench {
|
|
final ByteArrayInputStream inputStream = new ByteArrayInputStream(inputData);
|
|
final ByteArrayInputStream inputStream = new ByteArrayInputStream(inputData);
|
|
final ByteString inputString = ByteString.copyFrom(inputData);
|
|
final ByteString inputString = ByteString.copyFrom(inputData);
|
|
final Message sampleMessage = defaultMessage.newBuilderForType().mergeFrom(inputString).build();
|
|
final Message sampleMessage = defaultMessage.newBuilderForType().mergeFrom(inputString).build();
|
|
|
|
+ FileOutputStream devNullTemp = null;
|
|
|
|
+ CodedOutputStream reuseDevNullTemp = null;
|
|
|
|
+ try {
|
|
|
|
+ devNullTemp = new FileOutputStream("/dev/null");
|
|
|
|
+ reuseDevNullTemp = CodedOutputStream.newInstance(devNullTemp);
|
|
|
|
+ } catch (FileNotFoundException e) {
|
|
|
|
+ // ignore: this is probably Windows, where /dev/null does not exist
|
|
|
|
+ }
|
|
|
|
+ final FileOutputStream devNull = devNullTemp;
|
|
|
|
+ final CodedOutputStream reuseDevNull = reuseDevNullTemp;
|
|
benchmark("Serialize to byte string", inputData.length, new Action() {
|
|
benchmark("Serialize to byte string", inputData.length, new Action() {
|
|
public void execute() { sampleMessage.toByteString(); }
|
|
public void execute() { sampleMessage.toByteString(); }
|
|
});
|
|
});
|
|
@@ -99,6 +112,19 @@ public class ProtoBench {
|
|
sampleMessage.writeTo(new ByteArrayOutputStream());
|
|
sampleMessage.writeTo(new ByteArrayOutputStream());
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
+ if (devNull != null) {
|
|
|
|
+ benchmark("Serialize to /dev/null with FileOutputStream", inputData.length, new Action() {
|
|
|
|
+ public void execute() throws IOException {
|
|
|
|
+ sampleMessage.writeTo(devNull);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ benchmark("Serialize to /dev/null reusing FileOutputStream", inputData.length, new Action() {
|
|
|
|
+ public void execute() throws IOException {
|
|
|
|
+ sampleMessage.writeTo(reuseDevNull);
|
|
|
|
+ reuseDevNull.flush(); // force the write to the OutputStream
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
benchmark("Deserialize from byte string", inputData.length, new Action() {
|
|
benchmark("Deserialize from byte string", inputData.length, new Action() {
|
|
public void execute() throws IOException {
|
|
public void execute() throws IOException {
|
|
defaultMessage.newBuilderForType().mergeFrom(inputString).build();
|
|
defaultMessage.newBuilderForType().mergeFrom(inputString).build();
|