📜  Java中的 PushbackInputStream unread() 方法及示例

📅  最后修改于: 2022-05-13 01:54:19.756000             🧑  作者: Mango

Java中的 PushbackInputStream unread() 方法及示例

Java中PushbackInputStream类的unread()方法分为三种:

  1. Java中PushbackInputStream类的unread(int b)方法用于通过将字节复制到推回缓冲区的前面来推回一个字节。撤销此方法后,当读取下一个字节时,它的值等于传递的参数。

    句法:

    public void unread(int b)
                throws IOException
    

    参数:该方法接受一个参数b,代表要被推回的整数值。

    返回值:此方法不返回任何值。

    异常:如果输入流通过调用同一类的 close() 方法关闭,或者在回推缓冲区中没有足够的空间用于字节,则此方法抛出IOException

    下面的程序说明了 IO 包中 PushbackInputStream 类的 unread(int) 方法:

    方案一:

    // Java program to illustrate
    // PushbackInputStream unread(int) method
      
    import java.io.*;
      
    public class GFG {
        public static void main(String[] args)
            throws IOException
        {
      
            // Create an array
            byte[] byteArray
                = new byte[] { 'G', 'E', 'E',
                               'K', 'S' };
      
            // Create inputStream
            InputStream inputStr
                = new ByteArrayInputStream(byteArray);
      
            // Create object of
            // PushbackInputStream
            PushbackInputStream pushbackInputStr
                = new PushbackInputStream(inputStr);
      
            for (int i = 0; i < byteArray.length; i++) {
                System.out.print(
                    (char)pushbackInputStr.read());
            }
      
            // Call unread() method
            pushbackInputStr.unread(65);
      
            System.out.print(
                "\n"
                + (char)pushbackInputStr.read());
        }
    }
    
    输出:
    GEEKS
    A
    

    方案二:

    // Java program to illustrate
    // PushbackInputStream unread() method
      
    import java.io.*;
      
    public class GFG {
        public static void main(String[] args)
            throws IOException
        {
      
            // Create an array
            byte[] byteArray
                = new byte[] { 'G', 'E', 'E', 'K', 'S',
                               'F', 'O', 'R', 'G', 'E',
                               'E', 'K', 'S' };
      
            // Create inputStream
            InputStream inputStr
                = new ByteArrayInputStream(byteArray);
      
            // Create object of
            // PushbackInputStream
            PushbackInputStream pushbackInputStr
                = new PushbackInputStream(inputStr);
      
            for (int i = 0; i < byteArray.length; i++) {
                System.out.print(
                    (char)pushbackInputStr.read());
            }
      
            // Call unread() method
            pushbackInputStr.unread(90);
      
            System.out.print(
                "\n"
                + (char)pushbackInputStr.read());
        }
    }
    
    输出:
    GEEKSFORGEEKS
    Z
    
  2. Java中PushbackInputStream类的unread(byte[] b)方法用于通过将字节数组复制到推回缓冲区的前面来推回字节数组。撤销此方法后,当读取下一个字节时,它的值等于字节数组的第一个元素。

    句法:

    public void unread(byte[] b)
                throws IOException
    

    参数:该方法接受一个参数b,代表要被推回的字节数组。

    返回值:此方法不返回任何值。

    异常:如果输入流通过调用同一个类的 close() 方法关闭,或者在回推缓冲区中没有足够的空间用于数组字节,则此方法抛出IOException

    下面的程序说明了 IO 包中 PushbackInputStream 类的 unread(byte[]) 方法:

    方案一:

    // Java program to illustrate
    // PushbackInputStream unread(byte[]) method
      
    import java.io.*;
      
    public class GFG {
        public static void main(String[] args)
            throws IOException
        {
      
            // Create an array
            byte[] byteArray
                = new byte[] { 'G', 'E', 'E',
                               'K', 'S' };
      
            // Create inputStream
            InputStream inputStr
                = new ByteArrayInputStream(byteArray);
      
            // Create object of
            // PushbackInputStream
            PushbackInputStream pushbackInputStr
                = new PushbackInputStream(inputStr, 100);
      
            for (int i = 0; i < byteArray.length; i++) {
                System.out.print(
                    (char)pushbackInputStr.read());
            }
      
            // Create byte array
            byte[] b = new byte[] { 'A', 'B', 'C' };
      
            // Call unread() method
            pushbackInputStr.unread(b);
      
            System.out.println();
      
            for (int i = 0; i < b.length; i++) {
                System.out.print(
                    (char)pushbackInputStr.read());
            }
        }
    }
    
    输出:
    GEEKS
    ABC
    

    方案二:

    // Java program to illustrate
    // PushbackInputStream unread(byte[]) method
      
    import java.io.*;
      
    public class GFG {
        public static void main(String[] args)
            throws IOException
        {
      
            // Create an array
            byte[] byteArray
                = new byte[] { 'G', 'E', 'E', 'K', 'S',
                               'F', 'O', 'R', 'G', 'E',
                               'E', 'K', 'S' };
      
            // Create inputStream
            InputStream inputStr
                = new ByteArrayInputStream(byteArray);
      
            // Create object of
            // PushbackInputStream
            PushbackInputStream pushbackInputStr
                = new PushbackInputStream(inputStr, 100);
      
            for (int i = 0; i < byteArray.length; i++) {
                System.out.print(
                    (char)pushbackInputStr.read());
            }
      
            // Create byte array
            byte[] b = new byte[] { 'X', 'Y', 'Z' };
      
            // Call unread() method
            pushbackInputStr.unread(b);
      
            System.out.println();
      
            for (int i = 0; i < b.length; i++) {
                System.out.print(
                    (char)pushbackInputStr.read());
            }
        }
    }
    
    输出:
    GEEKSFORGEEKS
    XYZ
    
  3. Java中PushbackInputStream类的unread(byte[] b, int offset, int length)方法用于通过将字节数组的一部分复制到推回缓冲区的前面来推回字节数组的一部分。撤销此方法后,当读取下一个字节时,它的值等于给定字节数组部分的第一个元素。

    句法:

    public void unread(byte[] b,
                       int offset,
                       int length)
                throws IOException
    

    参数:此方法接受三个参数:

    • b – 它表示要推送的部分字节数组。
    • offset – 它表示字节数组部分的起始索引。
    • length - 它表示要推送的字节数。

    返回值:此方法不返回任何值。

    异常:如果输入流通过调用同一个类的 close() 方法关闭,或者在回推缓冲区中没有足够的空间用于数组字节,则此方法抛出IOException

    下面的程序说明了 IO 包中 PushbackInputStream 类的 unread(byte[], int, int) 方法:

    方案一:

    // Java program to illustrate
    // PushbackInputStream
    // unread(byte[], int, int) method
      
    import java.io.*;
      
    public class GFG {
        public static void main(String[] args)
            throws IOException
        {
      
            // Create an array
            byte[] byteArray
                = new byte[] { 'G', 'E', 'E',
                               'K', 'S' };
      
            // Create inputStream
            InputStream inputStr
                = new ByteArrayInputStream(byteArray);
      
            // Create object of
            // PushbackInputStream
            PushbackInputStream pushbackInputStr
                = new PushbackInputStream(inputStr, 100);
      
            for (int i = 0; i < byteArray.length; i++) {
                System.out.print(
                    (char)pushbackInputStr.read());
            }
      
            // Create byte array
            byte[] b
                = new byte[] { 'A', 'B', 'C',
                               'D', 'E' };
      
            // Call unread() method
            pushbackInputStr.unread(b, 2, 3);
      
            System.out.println();
      
            for (int i = 0; i < 3; i++) {
                System.out.print(
                    (char)pushbackInputStr.read());
            }
        }
    }
    
    输出:
    GEEKS
    CDE
    

    方案二:

    // Java program to illustrate
    // PushbackInputStream
    // unread(byte[], int, int) method
      
    import java.io.*;
      
    public class GFG {
        public static void main(String[] args)
            throws IOException
        {
      
            // Create an array
            byte[] byteArray
                = new byte[] { 'G', 'E', 'E', 'K', 'S',
                               'F', 'O', 'R', 'G', 'E',
                               'E', 'K', 'S' };
      
            // Create inputStream
            InputStream inputStr
                = new ByteArrayInputStream(byteArray);
      
            // Create object of
            // PushbackInputStream
            PushbackInputStream pushbackInputStr
                = new PushbackInputStream(inputStr, 100);
      
            for (int i = 0; i < byteArray.length; i++) {
                System.out.print(
                    (char)pushbackInputStr.read());
            }
      
            // Create byte array
            byte[] b = new byte[] { 'W', 'X', 'Y', 'Z' };
      
            // Call unread() method
            pushbackInputStr.unread(b, 1, 3);
      
            System.out.println();
      
            for (int i = 0; i < 3; i++) {
                System.out.print(
                    (char)pushbackInputStr.read());
            }
        }
    }
    
    输出:
    GEEKSFORGEEKS
    XYZ
    

参考:
1. https://docs.oracle.com/javase/10/docs/api/java Java)
2. https://docs.oracle.com/javase/10/docs/api/java Java)
3. https://docs.oracle.com/javase/10/docs/api/java Java, int, int)