InputStream.readNBytes(int) 这个函数中。?:这个选择感觉是多余的。int count = b.length有没有错。total变量不是bufs所有数组长度和吗?问题在第二张图。
这就如同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;
}
下面详细解释代码中的变量和选择操作的含义:
变量count表示当前读取的字节数量。这个变量在循环内部使用,并且在选择操作 "?: " 中进行判断。如果count小于0,表示已经读取到流的末尾,循环会终止;否则会将count累加到n变量上。
变量n表示已经读取的字节数量。初始值为0。循环会不断读取字节并将count累加到n上,直到达到指定的读取数量len为止。
变量len表示要读取的字节数量。这个参数传入方法时指定。
变量buf是一个byte[]数组,用于存储读取的字节数据。
选择操作 "?:" 是一个三元运算符,它在这里用于判断是否已经读取到指定的字节数量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"替换成你要读取的文件路径。读取到的字节数组将会打印到控制台上。