public ByteBuffer readBytes(int length) throws EOFException { assert length >= 0 : "buffer length should not be negative: " + length; byte[] buff = new byte[length]; try { readFully(buff); // reading data buffer } catch (EOFException e) { throw e; } catch (IOException e) { throw new FSReadError(e, filePath); } return ByteBuffer.wrap(buff); }
/** * Sequentially read bytes from the file and write them to the output stream * * @param reader The file reader to read from * @param validator validator to verify data integrity * @param start number of bytes to skip transfer, but include for validation. * @param length The full length that should be read from {@code reader} * @param bytesTransferred Number of bytes already read out of {@code length} * * @return Number of bytes read * * @throws java.io.IOException on any I/O error */ protected long write(RandomAccessReader reader, ChecksumValidator validator, int start, long length, long bytesTransferred) throws IOException { int toTransfer = (int) Math.min(transferBuffer.length, length - bytesTransferred); int minReadable = (int) Math.min(transferBuffer.length, reader.length() - reader.getFilePointer()); reader.readFully(transferBuffer, 0, minReadable); if (validator != null) validator.validate(transferBuffer, 0, minReadable); limiter.acquire(toTransfer - start); compressedOutput.write(transferBuffer, start, (toTransfer - start)); return toTransfer; } }
/** * Sequentially read bytes from the file and write them to the output stream * * @param reader The file reader to read from * @param validator validator to verify data integrity * @param start number of bytes to skip transfer, but include for validation. * @param length The full length that should be read from {@code reader} * @param bytesTransferred Number of bytes already read out of {@code length} * * @return Number of bytes read * * @throws java.io.IOException on any I/O error */ protected long write(RandomAccessReader reader, ChecksumValidator validator, int start, long length, long bytesTransferred) throws IOException { int toTransfer = (int) Math.min(transferBuffer.length, length - bytesTransferred); int minReadable = (int) Math.min(transferBuffer.length, reader.length() - reader.getFilePointer()); reader.readFully(transferBuffer, 0, minReadable); if (validator != null) validator.validate(transferBuffer, 0, minReadable); limiter.acquire(toTransfer - start); compressedOutput.write(transferBuffer, start, (toTransfer - start)); return toTransfer; } }
/** * Sequentially read bytes from the file and write them to the output stream * * @param reader The file reader to read from * @param validator validator to verify data integrity * @param start number of bytes to skip transfer, but include for validation. * @param length The full length that should be read from {@code reader} * @param bytesTransferred Number of bytes already read out of {@code length} * * @return Number of bytes read * * @throws java.io.IOException on any I/O error */ protected long write(RandomAccessReader reader, ChecksumValidator validator, int start, long length, long bytesTransferred) throws IOException { int toTransfer = (int) Math.min(transferBuffer.length, length - bytesTransferred); int minReadable = (int) Math.min(transferBuffer.length, reader.length() - reader.getFilePointer()); reader.readFully(transferBuffer, 0, minReadable); if (validator != null) validator.validate(transferBuffer, 0, minReadable); limiter.acquire(toTransfer - start); compressedOutput.write(transferBuffer, start, (toTransfer - start)); return toTransfer; } }
/** * Sequentially read bytes from the file and write them to the output stream * * @param reader The file reader to read from * @param validator validator to verify data integrity * @param start number of bytes to skip transfer, but include for validation. * @param length The full length that should be read from {@code reader} * @param bytesTransferred Number of bytes already read out of {@code length} * * @return Number of bytes read * * @throws java.io.IOException on any I/O error */ protected long write(RandomAccessReader reader, ChecksumValidator validator, int start, long length, long bytesTransferred) throws IOException { int toTransfer = (int) Math.min(transferBuffer.length, length - bytesTransferred); int minReadable = (int) Math.min(transferBuffer.length, reader.length() - reader.getFilePointer()); reader.readFully(transferBuffer, 0, minReadable); if (validator != null) validator.validate(transferBuffer, 0, minReadable); limiter.acquire(toTransfer - start); compressedOutput.write(transferBuffer, start, (toTransfer - start)); return toTransfer; } }
@SuppressWarnings("resource") public SyncSegment nextSegment(final int startPosition, final int nextSectionStartPosition) throws IOException { reader.seek(startPosition); int uncompressedLength = reader.readInt(); int compressedLength = nextSectionStartPosition - (int)reader.getPosition(); if (compressedLength > compressedBuffer.length) compressedBuffer = new byte[(int) (1.2 * compressedLength)]; reader.readFully(compressedBuffer, 0, compressedLength); if (uncompressedLength > uncompressedBuffer.length) uncompressedBuffer = new byte[(int) (1.2 * uncompressedLength)]; int count = compressor.uncompress(compressedBuffer, 0, compressedLength, uncompressedBuffer, 0); nextLogicalStart += SYNC_MARKER_SIZE; FileDataInput input = new FileSegmentInputStream(ByteBuffer.wrap(uncompressedBuffer, 0, count), reader.getPath(), nextLogicalStart); nextLogicalStart += uncompressedLength; return new SyncSegment(input, startPosition, nextSectionStartPosition, (int)nextLogicalStart, tolerateSegmentErrors(nextSectionStartPosition, reader.length())); } }
@SuppressWarnings("resource") public SyncSegment nextSegment(final int startPosition, final int nextSectionStartPosition) throws IOException { reader.seek(startPosition); int uncompressedLength = reader.readInt(); int compressedLength = nextSectionStartPosition - (int)reader.getPosition(); if (compressedLength > compressedBuffer.length) compressedBuffer = new byte[(int) (1.2 * compressedLength)]; reader.readFully(compressedBuffer, 0, compressedLength); if (uncompressedLength > uncompressedBuffer.length) uncompressedBuffer = new byte[(int) (1.2 * uncompressedLength)]; int count = compressor.uncompress(compressedBuffer, 0, compressedLength, uncompressedBuffer, 0); nextLogicalStart += SYNC_MARKER_SIZE; FileDataInput input = new FileSegmentInputStream(ByteBuffer.wrap(uncompressedBuffer, 0, count), reader.getPath(), nextLogicalStart); nextLogicalStart += uncompressedLength; return new SyncSegment(input, startPosition, nextSectionStartPosition, (int)nextLogicalStart, tolerateSegmentErrors(nextSectionStartPosition, reader.length())); } }
@SuppressWarnings("resource") public SyncSegment nextSegment(final int startPosition, final int nextSectionStartPosition) throws IOException { reader.seek(startPosition); int uncompressedLength = reader.readInt(); int compressedLength = nextSectionStartPosition - (int)reader.getPosition(); if (compressedLength > compressedBuffer.length) compressedBuffer = new byte[(int) (1.2 * compressedLength)]; reader.readFully(compressedBuffer, 0, compressedLength); if (uncompressedLength > uncompressedBuffer.length) uncompressedBuffer = new byte[(int) (1.2 * uncompressedLength)]; int count = compressor.uncompress(compressedBuffer, 0, compressedLength, uncompressedBuffer, 0); nextLogicalStart += SYNC_MARKER_SIZE; FileDataInput input = new FileSegmentInputStream(ByteBuffer.wrap(uncompressedBuffer, 0, count), reader.getPath(), nextLogicalStart); nextLogicalStart += uncompressedLength; return new SyncSegment(input, startPosition, nextSectionStartPosition, (int)nextLogicalStart, tolerateSegmentErrors(nextSectionStartPosition, reader.length())); } }
reader.readFully(buffer, 0, serializedSize); if (desc.version < CommitLogDescriptor.VERSION_21) claimedCRC32 = reader.readLong();