📌  相关文章
📜  Java中的 BufferedInputStream markSupported() 方法及示例(1)

📅  最后修改于: 2023-12-03 15:31:50.572000             🧑  作者: Mango

Java中的 BufferedInputStream markSupported() 方法及示例

BufferedInputStream类介绍

BufferedInputStream是InputStream的一个包装器,它可以提供缓冲功能,从而提高文件读取的效率。

markSupported()方法介绍

markSupported()方法是BufferedInputStream提供的一个方法,用于判断当前输入流是否支持标记(mark)和重置(reset)操作。如果支持标记和重置操作,则返回true;否则返回false。

示例代码
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;

public class BufferedInputStreamDemo {
    public static void main(String[] args) {
        try (InputStream inputStream = new FileInputStream("example.txt");
             BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream)) {

            // 判断当前输入流是否支持标记和重置操作
            if (bufferedInputStream.markSupported()) {
                System.out.println("当前输入流支持标记和重置操作");
            } else {
                System.out.println("当前输入流不支持标记和重置操作");
            }

            // 读取文件内容
            byte[] buffer = new byte[1024];
            int len;
            while ((len = bufferedInputStream.read(buffer)) != -1) {
                System.out.println(new String(buffer, 0, len));
            }

            // 标记当前位置,并且设置标记的读取限制为5个字节
            bufferedInputStream.mark(5);

            // 读取5个字节
            byte[] buffer1 = new byte[5];
            int len1 = bufferedInputStream.read(buffer1);
            System.out.println("读取前5个字节:" + new String(buffer1, 0, len1));

            // 重置输入流
            bufferedInputStream.reset();

            // 再次读取文件内容
            byte[] buffer2 = new byte[1024];
            int len2;
            while ((len2 = bufferedInputStream.read(buffer2)) != -1) {
                System.out.println(new String(buffer2, 0, len2));
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
代码说明
  1. 通过FileInputStream实例化一个文件输入流,再通过BufferedInputStream实例化一个带缓冲的输入流。这里使用了try-with-resources语句,可以自动关闭资源。
  2. 调用markSupported()方法判断当前输入流是否支持标记和重置操作。
  3. 使用BufferedInputStream的read(byte[] b)方法读取文件内容。
  4. 使用mark(int readlimit)方法标记当前位置,并设置标记的读取限制为5个字节。
  5. 使用read(byte[] b)方法读取5个字节。
  6. 使用reset()方法重置输入流。
  7. 再次使用read(byte[] b)方法读取文件内容。