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

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

Java中的 DataInputStream read() 方法及示例

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

  1. Java中DataInputStream类的read(byte[] b)方法用于从输入流中读取字节并将它们存储到缓冲区字节数组中。该read() 方法以整数类型返回实际读取的字节数。如果输入流结束并且没有更多数据可供读取,则此方法返回 -1。如果字节数组为空,此方法将引发异常。

    句法:

    public final int read(byte[] b)
                   throws IOException
    

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

    参数:此方法接受一个参数 b,该参数表示要读取数据的字节数组。

    返回值:该方法返回实际读取的字节数。如果输入流结束并且没有更多数据可供读取,则返回 -1。

    例外:

    • NullPointerException – 如果字节数组为空,则抛出NullPointerException
    • IOException – 如果流关闭或发生其他 I/O 错误,此方法将引发IOException

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

    程序:假设文件“c:/demo.txt”存在。

    // Java program to illustrate
    // DataInputStream read(byte[]) method
    import java.io.*;
    public class GFG {
        public static void main(String[] args)
            throws IOException
        {
      
            // Create input stream 'demo.txt'
            // for reading containing
            // text "GEEKSFORGEEKS"
            FileInputStream inputStream
                = new FileInputStream(
                    "c:/demo.txt");
      
            // Convert inputStream to
            // DataInputStream
            DataInputStream dataInputStr
                = new DataInputStream(
                    inputStream);
      
            // Count the total bytes
            // form the input stream
            int count = inputStream.available();
      
            // Create byte array
            byte[] b = new byte[count];
      
            // Read data into byte array
            int bytes = dataInputStr.read(b);
      
            // Print number of bytes
            // actually read
            System.out.println(bytes);
      
            for (byte by : b) {
                // Print the character
                System.out.print((char)by);
            }
        }
    }
    
    输入:
    输出:
  2. Java中DataInputStream类的read(byte[] b, int offset, int length)方法,用于从输入流中读取指定数量的字节,并存储到缓冲区字节数组中。这个read()方法返回字节数实际上读为整数类型。如果输入流结束并且没有更多数据可供读取,则此方法返回 -1。如果字节数组为空,此方法将引发异常。

    句法:

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

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

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

    • b – 它表示要读取数据的字节数组。
    • offset – 它表示字节数组中的起始索引。
    • 长度——它表示要读取的字节总数。

    返回值:该方法返回实际读取的字节数。如果输入流结束并且没有更多数据可供读取,则返回 -1。

    例外:

    • NullPointerException – 如果字节数组为空,则抛出NullPointerException
    • IndexOutOfBoundsException - 如果偏移量为负数或长度为负数或长度大于字节数组长度与偏移量的差,则抛出IndexOutOfBoundsException
    • IOException – 如果流关闭或发生其他 I/O 错误,此方法将引发IOException

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

    程序:假设文件“c:/demo.txt”存在。

    // Java program to illustrate
    // DataInputStream read(byte[], int, int) method
    import java.io.*;
    public class GFG {
        public static void main(String[] args)
            throws IOException
        {
      
            // Create input stream 'demo.txt'
            // for reading containing
            // text "GEEKSFORGEEKS"
            FileInputStream inputStream
                = new FileInputStream(
                    "c:/demo.txt");
      
            // Convert inputStream to
            // DataInputStream
            DataInputStream dataInputStr
                = new DataInputStream(
                    inputStream);
      
            // Count the total bytes
            // form the input stream
            int count = inputStream.available();
      
            // Create byte array
            byte[] b = new byte[count];
      
            // Read data into byte array
            int bytes = dataInputStr.read(b, 4, 5);
      
            // Print number of bytes
            // actually read
            System.out.println(bytes);
      
            for (byte by : b) {
                // Print the character
                System.out.print((char)by);
            }
        }
    }
    
    输入:
    输出:

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