En java, InputStream
clase tiene métodos read(byte[], int, int)
y readNBytes(byte[], int, int)
. Parece que estos dos métodos tienen exactamente la misma funcionalidad, por lo que me pregunto ¿cuáles son las diferencias entre ellos.
Tienes razón en que los javadocs son muy similares. En caso de duda, siempre bajar a la fuente. La mayoría de los entornos de desarrollo hacen que sea fácil para conectar la fuente de OpenJDK y le permite profundizar para ellos.
Esto es readNBytes
de InputStream.java :
public int readNBytes(byte[] b, int off, int len) throws IOException {
Objects.requireNonNull(b);
if (off < 0 || len < 0 || len > b.length - off)
throw new IndexOutOfBoundsException();
int n = 0;
while (n < len) {
int count = read(b, off + n, len - n);
if (count < 0)
break;
n += count;
}
return n;
}
Como se puede ver, en realidad se realiza una llamada a read(byte[],int,int)
. La diferencia en este caso es que si la lectura real de bytes es menor que el especificado len
, se intenta leer () de nuevo hasta que se confirmó que no es en realidad nada más que ser leído.
Editar: Tenga en cuenta que
- Esta es OpenJDK 's aplicación de la base
InputStream
. Otros pueden diferir. - Las subclases de
InputStream
también pueden tener su propia implementación reemplazado. Consultar el doc / fuente para la clase correspondiente.