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