Skip to content

NIFI-16189 Deprecated StreamUtils#read(InputStream,byte[] destination, int) - #11533

Merged
exceptionfactory merged 1 commit into
apache:mainfrom
dan-s1:NIFI-16189
Aug 12, 2026
Merged

NIFI-16189 Deprecated StreamUtils#read(InputStream,byte[] destination, int)#11533
exceptionfactory merged 1 commit into
apache:mainfrom
dan-s1:NIFI-16189

Conversation

@dan-s1

@dan-s1 dan-s1 commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Summary

NIFI-16189
The implementations of the read method in org.apache.nifi.stream.io.StreamUtils and readNBytes(byte[], int, int) in java.io.Inputstream method are almost identical. The big difference is when bytes cannot be read from the InputStream where read throws an EOFException while readNBytes breaks out of the while loop and returns the number of byes read even though it may be 0 or -1. Although there is this difference, it seems where read was used in SplitPCAP and StandardLoadBalanceProtocol there are subsequent checks in the code, hence even though an exception is not thrown if there is something wrong it will be noted.

For ease of review, the implementations are brought below.

public static void read(final InputStream source, final byte[] destination, final int byteCount) throws IOException {
        if (destination.length < byteCount) {
            throw new IllegalArgumentException();
        }

        int bytesRead = 0;
        int len;
        while (bytesRead < byteCount) {
            len = source.read(destination, bytesRead, byteCount - bytesRead);
            if (len < 0) {
                throw new EOFException("Expected to consume " + byteCount + " bytes but consumed only " + bytesRead);
            }

            bytesRead += len;
        }
    } 
public int readNBytes(byte[] b, int off, int len) throws IOException {
        Objects.checkFromIndexSize(off, len, b.length);

        int n = 0;
        while (n < len) {
            int count = read(b, off + n, len - n);
            if (count < 0)
                break;
            n += count;
        }
        return n;
    }

Tracking

Please complete the following tracking steps prior to pull request creation.

Issue Tracking

Pull Request Tracking

  • Pull Request title starts with Apache NiFi Jira issue number, such as NIFI-00000
  • Pull Request commit message starts with Apache NiFi Jira issue number, as such NIFI-00000
  • Pull request contains commits signed with a registered key indicating Verified status

Pull Request Formatting

  • Pull Request based on current revision of the main branch
  • Pull Request refers to a feature branch with one commit containing changes

Verification

Please indicate the verification steps performed prior to pull request creation.

Build

  • Build completed using ./mvnw clean install -P contrib-check
    • JDK 21
    • JDK 25

Licensing

  • New dependencies are compatible with the Apache License 2.0 according to the License Policy
  • New dependencies are documented in applicable LICENSE and NOTICE files

Documentation

  • Documentation formatting appears as expected in rendered files

@exceptionfactory exceptionfactory left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @dan-s1. On review, the change looks good. The behavioral difference is notable, but the checksum comparison in StandardLoadBalanceProtocol ensures expected behavior.

@exceptionfactory
exceptionfactory merged commit 66a8816 into apache:main Aug 12, 2026
15 of 16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants