From 6ba3df0d326e6478101c8cd0bb9bce6c7cc87488 Mon Sep 17 00:00:00 2001 From: "kenton@google.com" Date: Tue, 3 Nov 2009 18:21:54 +0000 Subject: [PATCH] Add benchmarks for writing to a FileOutputStream. Patch from Evan Jones. --- benchmarks/ProtoBench.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/benchmarks/ProtoBench.java b/benchmarks/ProtoBench.java index 1dffe1c17f..6717ffa2f2 100644 --- a/benchmarks/ProtoBench.java +++ b/benchmarks/ProtoBench.java @@ -33,12 +33,15 @@ package com.google.protocolbuffers; 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 class ProtoBench { 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 class ProtoBench { 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();