mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-21 07:09:56 +01:00
Use buffers for record headers. No need to buffer payloads.
This commit is contained in:
@@ -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;
|
|||||||
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;
|
|||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user