@Override
	protected boolean readNextChunk() throws IOException {
		byte[] readBuffer = new byte[DEFAULT_BUFFER_SIZE];
		int bytesRead = -1;

		// Reset the current chunk and offset
		currentChunk = null;
		chunkPos = 0;

		if (hashers.isEmpty()) {
			return false;
		}

		bytesRead = delegate.read(readBuffer);

		if (bytesRead <= 0) {
			// No more data available, finalize the hashes
			for (Map.Entry<String, MessageDigest> hashCheck : hashers.entrySet()) {
				finalHashes.put(hashCheck.getKey(), hashCheck.getValue().digest());
			}

			// prevents trying to call digest() again
			hashers.clear();

			// Return false since no more data is available
			return false;
		}

		// Update all the hashes with the new data read
		for (MessageDigest hasher : hashers.values()) {
			hasher.update(readBuffer, 0, bytesRead);
		}

		currentChunk = Arrays.copyOf(readBuffer, bytesRead);

		return currentChunk != null && currentChunk.length > 0;
	}
Read the next chunk in the stream and update all of the hashes

@return True if more data is now available, False otherwise.
@throws IOException If there is a read failure of the data
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/cart/CartV1StreamHasher.java