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

This commit is contained in:
kenton@google.com 2009-11-03 18:21:54 +00:00
parent c0abf64e53
commit 6ba3df0d32

View File

@ -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();