Java内置readNByte函数感觉有多余

InputStream.readNBytes(int) 这个函数中。?:这个选择感觉是多余的。int count = b.length有没有错。total变量不是bufs所有数组长度和吗?问题在第二张图。

img

img

这就如同intern

【以下回答由 GPT 生成】

对于问题标题中的Java内置readNByte函数中的选择操作是否多余,我的回答是:不,选择操作不是多余的。下面是详细解释和代码示例。

在Java的InputStream类中,readNBytes(int)方法的实现如下:

public byte[] readNBytes(int len) throws IOException {
    if (len <= 0) {
        return new byte[0];
    }

    byte[] buf = new byte[len];
    int n = 0;
    do {
        int count = this.read(buf, n, len - n);
        if (count < 0) {
            break;
        }
        n += count;
    } while (n < len);

    if (n != buf.length) {
        buf = Arrays.copyOf(buf, n);
    }
    return buf;
}

下面详细解释代码中的变量和选择操作的含义:

  1. 变量count表示当前读取的字节数量。这个变量在循环内部使用,并且在选择操作 "?: " 中进行判断。如果count小于0,表示已经读取到流的末尾,循环会终止;否则会将count累加到n变量上。

  2. 变量n表示已经读取的字节数量。初始值为0。循环会不断读取字节并将count累加到n上,直到达到指定的读取数量len为止。

  3. 变量len表示要读取的字节数量。这个参数传入方法时指定。

  4. 变量buf是一个byte[]数组,用于存储读取的字节数据。

  5. 选择操作 "?:" 是一个三元运算符,它在这里用于判断是否已经读取到指定的字节数量len。如果已经读取到len数量的字节,则循环终止;否则继续读取。

在这个实现中,选择操作 "?:" 的作用是用来判断是否已经读取到了指定的数量len。如果已经读取到了,循环会终止;如果没有读取到,循环会继续执行。

代码示例:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;

public class ReadNBytesExample {
    public static void main(String[] args) {
        try {
            InputStream inputStream = new FileInputStream("example.txt");
            byte[] bytes = readNBytes(inputStream, 10);
            System.out.println(Arrays.toString(bytes));
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static byte[] readNBytes(InputStream inputStream, int len) throws IOException {
        if (len <= 0) {
            return new byte[0];
        }

        byte[] buf = new byte[len];
        int n = 0;
        do {
            int count = inputStream.read(buf, n, len - n);
            if (count < 0) {
                break;
            }
            n += count;
        } while (n < len);

        if (n != buf.length) {
            buf = Arrays.copyOf(buf, n);
        }
        return buf;
    }
}

这个示例演示了如何使用readNBytes函数从文件中读取指定数量的字节。你可以将"example.txt"替换成你要读取的文件路径。读取到的字节数组将会打印到控制台上。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^