@Override public long readLong() { return binaryCodec.readLong(); }
private static Header readHeader(final BinaryCodec binaryCodec) { final byte[] buffer = new byte[SBI_MAGIC.length]; binaryCodec.readBytes(buffer); if (!Arrays.equals(buffer, SBI_MAGIC)) { throw new RuntimeException("Invalid file header in SBI: " + new String(buffer) + " (" + Arrays.toString(buffer) + ")"); } final long fileLength = binaryCodec.readLong(); final byte[] md5 = new byte[16]; binaryCodec.readBytes(md5); final byte[] uuid = new byte[16]; binaryCodec.readBytes(uuid); final long totalNumberOfRecords = binaryCodec.readLong(); final long granularity = binaryCodec.readLong(); return new Header(fileLength, md5, uuid, totalNumberOfRecords, granularity); }
private static Header readHeader(final BinaryCodec binaryCodec) { final byte[] buffer = new byte[SBI_MAGIC.length]; binaryCodec.readBytes(buffer); if (!Arrays.equals(buffer, SBI_MAGIC)) { throw new RuntimeException("Invalid file header in SBI: " + new String(buffer) + " (" + Arrays.toString(buffer) + ")"); } final long fileLength = binaryCodec.readLong(); final byte[] md5 = new byte[16]; binaryCodec.readBytes(md5); final byte[] uuid = new byte[16]; binaryCodec.readBytes(uuid); final long totalNumberOfRecords = binaryCodec.readLong(); final long granularity = binaryCodec.readLong(); return new Header(fileLength, md5, uuid, totalNumberOfRecords, granularity); }
private static SBIIndex readIndex(final InputStream in) { final BinaryCodec binaryCodec = new BinaryCodec(in); final Header header = readHeader(binaryCodec); final long numOffsetsLong = binaryCodec.readLong(); if (numOffsetsLong > Integer.MAX_VALUE) { throw new RuntimeException(String.format("Cannot read SBI with more than %s offsets.", Integer.MAX_VALUE)); } final int numOffsets = (int) numOffsetsLong; final long[] virtualOffsets = new long[numOffsets]; long prev = -1; for (int i = 0; i < numOffsets; i++) { final long cur = binaryCodec.readLong(); if (prev > cur) { throw new RuntimeException(String.format( "Invalid SBI; offsets not in order: %#x > %#x", prev, cur)); } virtualOffsets[i] = cur; prev = cur; } return new SBIIndex(header, virtualOffsets); }
private static SBIIndex readIndex(final InputStream in) { final BinaryCodec binaryCodec = new BinaryCodec(in); final Header header = readHeader(binaryCodec); final long numOffsetsLong = binaryCodec.readLong(); if (numOffsetsLong > Integer.MAX_VALUE) { throw new RuntimeException(String.format("Cannot read SBI with more than %s offsets.", Integer.MAX_VALUE)); } final int numOffsets = (int) numOffsetsLong; final long[] virtualOffsets = new long[numOffsets]; long prev = -1; for (int i = 0; i < numOffsets; i++) { final long cur = binaryCodec.readLong(); if (prev > cur) { throw new RuntimeException(String.format( "Invalid SBI; offsets not in order: %#x > %#x", prev, cur)); } virtualOffsets[i] = cur; prev = cur; } return new SBIIndex(header, virtualOffsets); }
@Test public void testReadAndWriteLong() throws IOException { final long value = 42; final File outputFile = File.createTempFile(TEST_BASENAME, ".bin"); outputFile.deleteOnExit(); final OutputStream stream = new FileOutputStream(outputFile); final BinaryCodec codec = new BinaryCodec(stream); codec.writeLong(value); codec.close(); //Reading from file final InputStream instream = new FileInputStream(outputFile); final BinaryCodec readCodec = new BinaryCodec(instream); Assert.assertEquals(value, readCodec.readLong()); readCodec.close(); }