java: leer vs readNBytes de la instancia de InputStream

YS Yuan:

En java, InputStreamclase 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.

NFR:

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 readNBytesde 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

  1. Esta es OpenJDK 's aplicación de la base InputStream. Otros pueden diferir.
  2. Las subclases de InputStreamtambién pueden tener su propia implementación reemplazado. Consultar el doc / fuente para la clase correspondiente.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=192469&siteId=1
Recomendado
Clasificación