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.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();
|
||||||
|
Loading…
Reference in New Issue
Block a user