📌  相关文章
📜  Java中的 PushbackInputStream read() 方法和示例

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

Java中的 PushbackInputStream read() 方法和示例

Java中PushbackInputStream类的read()方法有两种:

  1. Java中PushbackInputStream类的read()方法用于从输入流中读取下一个字节的数据。此方法以整数形式从输入流中返回读取的字节。

    句法:

    public int read()
              throws IOException
    

    覆盖:此方法覆盖FilterInputStream类的 read() 方法。

    参数:此方法不接受任何参数。

    返回值:此方法返回流的下一个字节。如果流结束,则返回 -1。

    异常:如果通过调用同一个类的close()方法关闭输入流或发生I/O错误,则该方法抛出IOException

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

    方案一:

    // Java program to illustrate
    // PushbackInputStream read() 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.println(
                    "Char : "
                    + (char)pushbackInputStr.read());
            }
        }
    }
    
    输出:
    Char : G
    Char : E
    Char : E
    Char : K
    Char : S
    

    方案二:

    // Java program to illustrate
    // PushbackInputStream read() 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.println(
                    "Char : "
                    + (char)pushbackInputStr.read());
            }
        }
    }
    
    输出:
    Char : G
    Char : E
    Char : E
    Char : K
    Char : S
    Char : F
    Char : O
    Char : R
    Char : G
    Char : E
    Char : E
    Char : K
    Char : S
    
  2. Java中PushbackInputStream类的read(byte[], int, int)方法用于将输入流中最多给定字节的数据读取到字节数组中。此方法不是一次读取一个字符,而是一次读取多个字符。

    句法:

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

    覆盖:此方法覆盖FilterInputStream类的 read() 方法。

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

    • b – 它表示读取数据的字节数组。
    • offset – 它表示数组中的起始索引。
    • length - 它表示要读取的字节数。

    返回值:该方法返回读取的总字节数。如果流结束,则返回 -1。

    例外:

    • NullPointerException – 如果字节数组为空,此方法将抛出 NullPointerException。
    • IndexOutOfBoundsException - 如果偏移量为负数或长度为负数或长度大于数组长度和偏移量的差,则此方法抛出 IndexOutOfBoundsException。
    • IOException – 如果通过调用同一类的 close() 方法关闭输入流或发生 I/O 错误,则此方法将引发IOException

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

    方案一:

    // Java program to illustrate
    // PushbackInputStream
    // read(byte[], int, int) method
      
    import java.io.*;
      
    public class GFG {
        public static void main(String[] args)
            throws IOException
        {
      
            // Create buffer
            byte[] b = new byte[1024];
      
            // 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);
      
            pushbackInputStr.read(b, 0, 4);
      
            for (int i = 0; i < 4; i++) {
                System.out.print((char)b[i]);
            }
        }
    }
    
    输出:
    GEEK
    

    方案二:

    // Java program to illustrate
    // PushbackInputStream
    // read(byte[], int, int) method
      
    import java.io.*;
      
    public class GFG {
        public static void main(String[] args)
            throws IOException
        {
      
            // Create buffer
            byte[] b = new byte[1024];
      
            // 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);
      
            pushbackInputStr.read(b, 8, 5);
      
            for (int i = 8; i < 13; i++) {
                System.out.print((char)b[i]);
            }
        }
    }
    
    输出:
    GEEKS
    

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