Clase Java.io.PushbackInputStream en Java

Pushback se utiliza en un flujo de entrada para permitir que un byte se lea y luego se devuelva (es decir, «retroceder») al flujo. La clase PushbackInputStream implementa esta idea. Proporciona un mecanismo para «mirar» lo que proviene de un flujo de entrada sin interrumpirlo. 
Extiende FilterInputStream.
Campos: 

  • byte protegido [] buf : este es el búfer de retroceso. 
     
  • protegido int pos : esta es la posición dentro del búfer de retroceso desde el cual se leerá el siguiente byte. 
     
  • InputStream protegido en : este es el flujo de entrada que se filtrará. 

Constructores: 

  • PushbackInputStream(InputStream in): esto crea un objeto de flujo que permite devolver un byte al flujo de entrada. 
     
  • PushbackInputStream (InputStream in, int numBytes): esto crea una secuencia que tiene un búfer de retroceso que tiene una longitud de numBytes. Esto permite devolver varios bytes al flujo de entrada. 

Métodos: 

  • int available(): Devuelve una estimación de la cantidad de bytes que se pueden leer (u omitir) de este flujo de entrada sin bloquearse con la próxima invocación de un método para este flujo de entrada. La próxima invocación podría ser el mismo hilo u otro hilo. Una sola lectura u omisión de esta cantidad de bytes no bloqueará, pero puede leer u omitir menos bytes. 
     
Syntax: public int available()
Returns: the number of bytes that can be read
 (or skipped over) from the input stream without blocking.
Exception: IOException - if this input stream has 
been closed by invoking its close() method, or an I/O error occurs.
  • void close(): Cierra este flujo de entrada y libera cualquier recurso del sistema asociado con el flujo. Una vez que se ha cerrado la secuencia, las invocaciones adicionales de read(), unread(), available(), reset() o skip() arrojarán una IOException. Cerrar una transmisión previamente cerrada no tiene ningún efecto. 
Syntax: public void close()
Returns: NA
Exception: IOException - if an I/O error occurs.
  • boolean markSupported(): comprueba si este flujo de entrada admite los métodos de marcar y restablecer, lo cual no es así. 
Syntax: public boolean markSupported()
Returns: false, since this class does not support the mark and reset methods.
Exception: NA

Java

// Java code illustrating available(), close()
// and markSupported() methods
 
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.PushbackInputStream;
 
 
public class PushbackInputStreamDemo
{
    public static void main(String arg[]) throws IOException
    {
        PrintWriter pw = new PrintWriter(System.out, true);
        String str = "Hey geeks ";
        byte b[] = str.getBytes();
        ByteArrayInputStream bout = new ByteArrayInputStream(b);
        PushbackInputStream push = new PushbackInputStream(bout);
         
        // checking no. of bytes available
        pw.println("available bytes: " + push.available());
         
        // checking if mark is supported
        pw.println("mark supported? :" + push.markSupported());
         
        pw.close();
    }
}

Producción: 

available bytes: 10
mark supported? :false
  • int read(): lee el siguiente byte de datos de este flujo de entrada. El byte de valor se devuelve como un int en el rango de 0 a 255. Si no hay ningún byte disponible porque se alcanzó el final de la transmisión, se devuelve el valor -1. Este método bloquea hasta que los datos de entrada están disponibles, se detecta el final de la transmisión o se genera una excepción. 
Syntax: public int read()
Returns: the next byte of data, or -1 if 
the end of the stream has been reached.
Exception: IOException - if this input stream 
has been closed by invoking its close() method, or an I/O error occurs.
  • int read(byte[] b, int off, int len): Lee hasta len bytes de datos de este flujo de entrada en una array de bytes. Este método primero lee los bytes retrocedidos; después de eso, si se han leído menos de len bytes, se lee desde el flujo de entrada subyacente. Si len no es cero, el método se bloquea hasta que esté disponible al menos 1 byte de entrada; de lo contrario, no se leen bytes y se devuelve 0. 
Syntax: public int read(byte[] b, int off, int len).
Returns: the total number of bytes read into 
the buffer, or -1 if there is no more data because the end of 
the stream has been reached.
Exception:  NullPointerException - If b is null.
IndexOutOfBoundsException - If off is negative, len is negative, or 
len is greater than b.length - off
IOException - if this input stream has been closed by invoking its 
close() method, or an I/O error occurs.

Java

// Java code illustrating read() method
 
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.PushbackInputStream;
 
 
public class PushbackInputStreamDemo
{
    public static void main(String arg[]) throws IOException
    {
        PrintWriter pw = new PrintWriter(System.out, true);
        String str = "GeeksforGeeks a computer science portal ";
        byte b[] = str.getBytes();
        ByteArrayInputStream bout = new ByteArrayInputStream(b);
        PushbackInputStream push = new PushbackInputStream(bout);
         
        int c;
        while((c=push.read())!=-1)
        {
            pw.print((char)c);
        }
        pw.println();
        push.read(b, 0, 13);
        for(int i=0; i<13; i++)
        {
            pw.print((char)b[i]);
        }
        pw.println();
        pw.close();
    }
}

Producción: 

GeeksforGeeks a computer science portal 
GeeksforGeeks
  • void mark(int readlimit): Marca la posición actual en este flujo de entrada. 
    El método de marca de PushbackInputStream no hace nada. 
Syntax: public void mark(int readlimit)
Returns: NA
Exception: NA
  • void reset(): Reposiciona este flujo a la posición en el momento en que se llamó por última vez al método de marca en este flujo de entrada. 
    El método reset para la clase PushbackInputStream no hace nada excepto lanzar una IOException. 
Syntax: public void reset()
Returns: NA
Exception: IOException - if this method is invoked.

Java

// Java code illustrating mark() and reset() method
 
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.PushbackInputStream;
 
 
public class PushbackInputStreamDemo
{
    public static void main(String arg[]) throws Exception
    {
        PrintWriter pw = new PrintWriter(System.out, true);
        String str = "GeeksforGeeks a computer science portal ";
        byte b[] = str.getBytes();
        ByteArrayInputStream bout = new ByteArrayInputStream(b);
        PushbackInputStream push = new PushbackInputStream(bout);
         
        int c;
        while((c=push.read())!=-1)
        {
            pw.print((char)c);
        }
        pw.println();
         
        // marking the position
        push.mark(5);
         
        // resetting is not supported throw exception
        push.reset();
         
        pw.close();
    }
}

Producción: 

GeeksforGeeks a computer science portal 
Exception in thread "main" java.io.IOException: mark/reset not supported
    at java.io.PushbackInputStream.reset(PushbackInputStream.java:364)
    at PushbackInputStreamDemo.main(PushbackInputStreamDemo.java:29)
  • void no leído (byte [] b): empuja hacia atrás una array de bytes copiándolos al frente del búfer de retroceso. Después de que este método regrese, el siguiente byte que se leerá tendrá el valor b[0], el byte siguiente tendrá el valor b[1], y así sucesivamente. 
Syntax: public void unread(byte[] b)
returns: NA
Exception: IOException - If there is not enough room in 
the pushback buffer for the specified number of bytes, or this input 
stream has been closed by invoking its close() method.
  • void no leído (byte [] b, int off, int len): empuja hacia atrás una array de bytes copiándolos al frente del búfer de retroceso. Después de que este método regrese, el siguiente byte que se leerá tendrá el valor b[0], el byte siguiente tendrá el valor b[1], y así sucesivamente. 
Syntax: public void unread(byte[] b,int off,int len)
Returns: NA
Exception: IOException - If there is not enough room 
in the pushback buffer for the specified number of bytes, or this input 
stream has been closed by invoking its close() method.

Java

// Java code illustrating unread() method
 
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.PushbackInputStream;
 
 
public class PushbackInputStreamDemo
{
    public static void main(String arg[]) throws Exception
    {
        PrintWriter pw = new PrintWriter(System.out, true);
        String str = "GeeksforGeeks a computer science portal ";
        byte b[] = str.getBytes();
        ByteArrayInputStream bout = new ByteArrayInputStream(b);
        PushbackInputStream push = new PushbackInputStream(bout);
         
        int c;
        while((c=push.read())!=-1)
        {
            pw.print((char)c);
        }
        pw.println();
 
      // unread method
        push.unread(b);
        push.unread(b, 0, 6);
 
        while((c=push.read())!=-1)
        {
            pw.print((char)c);
        }
        pw.println();
        pw.close();
    }
}

Producción: 

GeeksforGeeks a computer science portal
orGeeks a computer science portal
  • void unread(int b): empuja hacia atrás un byte copiándolo al frente del búfer de retroceso. Después de que este método regrese, el siguiente byte que se leerá tendrá el valor (byte)b. 
Syntax: public void unread(int b)
Returns: NA
Exception: IOException - If there is not enough 
room in the pushback buffer for the byte, or this input stream 
has been closed by invoking its close() method.

Java

// java code illustrating unread() method
 
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.PushbackInputStream;
 
 
public class PushbackInputStreamDemo
{
    public static void main(String arg[]) throws Exception
    {
        PrintWriter pw = new PrintWriter(System.out, true);
        String str = "GeeksforGeeks a computer science portal ";
        byte b[] = str.getBytes();
        ByteArrayInputStream bout = new ByteArrayInputStream(b);
        PushbackInputStream push = new PushbackInputStream(bout);
         
 
      // unread method
        push.unread('A');
        b[1] = (byte)push.read();
        pw.println((char)b[1]);
    }
}

Producción: 

A

Este artículo es una contribución de Abhishek Verma . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *