Skip to content
Snippets Groups Projects
Verified Commit c3e4742b authored by akwizgran's avatar akwizgran
Browse files

Use buffers for record headers. No need to buffer payloads.

parent d4b87983
No related branches found
No related tags found
No related merge requests found
...@@ -4,8 +4,8 @@ import org.briarproject.bramble.api.FormatException; ...@@ -4,8 +4,8 @@ import org.briarproject.bramble.api.FormatException;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.record.Record; import org.briarproject.bramble.api.record.Record;
import org.briarproject.bramble.api.record.RecordReader; import org.briarproject.bramble.api.record.RecordReader;
import org.briarproject.bramble.util.ByteUtils;
import java.io.BufferedInputStream;
import java.io.DataInputStream; import java.io.DataInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
...@@ -13,22 +13,25 @@ import java.io.InputStream; ...@@ -13,22 +13,25 @@ import java.io.InputStream;
import javax.annotation.concurrent.NotThreadSafe; import javax.annotation.concurrent.NotThreadSafe;
import static org.briarproject.bramble.api.record.Record.MAX_RECORD_PAYLOAD_BYTES; import static org.briarproject.bramble.api.record.Record.MAX_RECORD_PAYLOAD_BYTES;
import static org.briarproject.bramble.api.record.Record.RECORD_HEADER_BYTES;
@NotThreadSafe @NotThreadSafe
@NotNullByDefault @NotNullByDefault
class RecordReaderImpl implements RecordReader { class RecordReaderImpl implements RecordReader {
private final DataInputStream in; private final DataInputStream in;
private final byte[] header = new byte[RECORD_HEADER_BYTES];
RecordReaderImpl(InputStream in) { RecordReaderImpl(InputStream in) {
this.in = new DataInputStream(new BufferedInputStream(in, 1024)); this.in = new DataInputStream(in);
} }
@Override @Override
public Record readRecord() throws IOException { public Record readRecord() throws IOException {
byte protocolVersion = in.readByte(); in.readFully(header);
byte recordType = in.readByte(); byte protocolVersion = header[0];
int payloadLength = in.readShort() & 0xFFFF; // Convert to unsigned byte recordType = header[1];
int payloadLength = ByteUtils.readUint16(header, 2);
if (payloadLength < 0 || payloadLength > MAX_RECORD_PAYLOAD_BYTES) if (payloadLength < 0 || payloadLength > MAX_RECORD_PAYLOAD_BYTES)
throw new FormatException(); throw new FormatException();
byte[] payload = new byte[payloadLength]; byte[] payload = new byte[payloadLength];
......
...@@ -3,30 +3,33 @@ package org.briarproject.bramble.record; ...@@ -3,30 +3,33 @@ package org.briarproject.bramble.record;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.record.Record; import org.briarproject.bramble.api.record.Record;
import org.briarproject.bramble.api.record.RecordWriter; import org.briarproject.bramble.api.record.RecordWriter;
import org.briarproject.bramble.util.ByteUtils;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import javax.annotation.concurrent.NotThreadSafe; import javax.annotation.concurrent.NotThreadSafe;
import static org.briarproject.bramble.api.record.Record.RECORD_HEADER_BYTES;
@NotThreadSafe @NotThreadSafe
@NotNullByDefault @NotNullByDefault
class RecordWriterImpl implements RecordWriter { class RecordWriterImpl implements RecordWriter {
private final DataOutputStream out; private final OutputStream out;
private final byte[] header = new byte[RECORD_HEADER_BYTES];
RecordWriterImpl(OutputStream out) { RecordWriterImpl(OutputStream out) {
this.out = new DataOutputStream(new BufferedOutputStream(out, 1024)); this.out = out;
} }
@Override @Override
public void writeRecord(Record r) throws IOException { public void writeRecord(Record r) throws IOException {
out.write(r.getProtocolVersion());
out.write(r.getRecordType());
byte[] payload = r.getPayload(); byte[] payload = r.getPayload();
out.writeShort(payload.length); header[0] = r.getProtocolVersion();
header[1] = r.getRecordType();
ByteUtils.writeUint16(payload.length, header, 2);
out.write(header);
out.write(payload); out.write(payload);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment