Permalink
Browse files

Add benchmarks for writing to a FileOutputStream. Patch from Evan Jones.

  • Loading branch information...
1 parent 51d30b5 commit b65c85953715c1ea3aa921d3a98230515da1e971 Kenton Varda committed Nov 3, 2009
Showing with 26 additions and 0 deletions.
  1. +26 −0 benchmarks/ProtoBench.java
View
26 benchmarks/ProtoBench.java
@@ -33,12 +33,15 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.lang.reflect.Method;
import com.google.protobuf.ByteString;
import com.google.protobuf.CodedInputStream;
+import com.google.protobuf.CodedOutputStream;
import com.google.protobuf.Message;
public class ProtoBench {
@@ -88,6 +91,16 @@ public static boolean runTest(String type, String file) {
final ByteArrayInputStream inputStream = new ByteArrayInputStream(inputData);
final ByteString inputString = ByteString.copyFrom(inputData);
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() {
public void execute() { sampleMessage.toByteString(); }
});
@@ -99,6 +112,19 @@ public void execute() throws IOException {
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() {
public void execute() throws IOException {
defaultMessage.newBuilderForType().mergeFrom(inputString).build();

0 comments on commit b65c859

Please sign in to comment.