Add benchmarks for writing to a FileOutputStream. Patch from Evan Jones.
This commit is contained in:
parent
c0abf64e53
commit
6ba3df0d32
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user