mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-11 18:29:05 +01:00
Add BdfReader methods for 32-bit ints.
We use these a lot so it's convenient to have built-in support. Also make BdfReaderImpl and BdfWriterImpl final to enable compiler optimisations.
This commit is contained in:
@@ -33,7 +33,7 @@ import static org.briarproject.bramble.util.StringUtils.fromUtf8;
|
||||
|
||||
@NotThreadSafe
|
||||
@NotNullByDefault
|
||||
class BdfReaderImpl implements BdfReader {
|
||||
final class BdfReaderImpl implements BdfReader {
|
||||
|
||||
private static final byte[] EMPTY_BUFFER = new byte[0];
|
||||
|
||||
@@ -232,6 +232,31 @@ class BdfReaderImpl implements BdfReader {
|
||||
hasLookahead = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasInt() throws IOException {
|
||||
if (!hasLookahead) readLookahead();
|
||||
if (eof) return false;
|
||||
return next == INT_8 || next == INT_16 || next == INT_32;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int readInt() throws IOException {
|
||||
if (!hasInt()) throw new FormatException();
|
||||
hasLookahead = false;
|
||||
if (next == INT_8) return readInt8();
|
||||
if (next == INT_16) return readInt16();
|
||||
return readInt32();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void skipInt() throws IOException {
|
||||
if (!hasInt()) throw new FormatException();
|
||||
if (next == INT_8) skip(1);
|
||||
else if (next == INT_16) skip(2);
|
||||
else skip(4);
|
||||
hasLookahead = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasDouble() throws IOException {
|
||||
if (!hasLookahead) readLookahead();
|
||||
|
||||
@@ -38,7 +38,7 @@ import static org.briarproject.bramble.util.StringUtils.UTF_8;
|
||||
|
||||
@NotThreadSafe
|
||||
@NotNullByDefault
|
||||
class BdfWriterImpl implements BdfWriter {
|
||||
final class BdfWriterImpl implements BdfWriter {
|
||||
|
||||
private final OutputStream out;
|
||||
|
||||
|
||||
@@ -162,12 +162,35 @@ public class BdfReaderImplTest extends BrambleTestCase {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSkipLong() throws Exception {
|
||||
public void testSkipLong64() throws Exception {
|
||||
setContents("28" + "0000000080000000");
|
||||
r.skipLong();
|
||||
assertTrue(r.eof());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReadInt() throws Exception {
|
||||
setContents("21" + "7F" + "21" + "80"
|
||||
+ "22" + "7FFF" + "22" + "8000"
|
||||
+ "24" + "7FFFFFFF" + "24" + "80000000");
|
||||
assertEquals(Byte.MAX_VALUE, r.readInt());
|
||||
assertEquals(Byte.MIN_VALUE, r.readInt());
|
||||
assertEquals(Short.MAX_VALUE, r.readInt());
|
||||
assertEquals(Short.MIN_VALUE, r.readInt());
|
||||
assertEquals(Integer.MAX_VALUE, r.readInt());
|
||||
assertEquals(Integer.MIN_VALUE, r.readInt());
|
||||
assertTrue(r.eof());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSkipInt() throws Exception {
|
||||
setContents("21" + "7F" + "22" + "7FFF" + "24" + "7FFFFFFF");
|
||||
r.skipInt();
|
||||
r.skipInt();
|
||||
r.skipInt();
|
||||
assertTrue(r.eof());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReadDouble() throws Exception {
|
||||
// http://babbage.cs.qc.edu/IEEE-754/Decimal.html
|
||||
|
||||
Reference in New Issue
Block a user