浅析Java.IO输入输出流 过滤流 buffer流和data流

浅析Java.IO输入输出流 过滤流 Buffer流和Data流

什么是Java IO

Java IO 是针对输入和输出数据的流处理 API。Java IO 库中包含了一组类和接口,提供了对标准输入、输出和文件系统的访问。

在 Java IO 中,数据承载的载体为流(stream)。流是指在数据源和数据目的地之间建立起的一条虚拟的传输通道,数据按照字节的方式在流中传输。Java IO 中的流可以按照接口和实现类分为四种:

  1. 字节流
  2. 字符流
  3. 过滤流
  4. 对象流

在本篇攻略中,我们将着重介绍流中的两种:过滤流和缓冲流。

过滤流

过滤流(FilterStream)是一种节点流,它对新的输入流或输出流添加功能的流。FilterInputStream 和 FilterOutputStream 为其提供了基础。所有的过滤流都是对一个输入流或输出流进行操作,因此其作用可以理解为“修饰”流,通过向构造方法中传递InputStream或OutputStream来简化其他流的操作。

使用过滤流可以在运行时根据需要添加或删除某些特性,进而提高流读写的效率和灵活性。

示例1:使用 GZIP 压缩过滤流压缩文件

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.GZIPOutputStream;

public class CompressedFile {

    public static void main(String[] args) throws IOException {
        String fileInput = "example.txt";
        String fileOutput = "example.gz";
        FileInputStream input = new FileInputStream(fileInput);
        GZIPOutputStream gzipOutput = new GZIPOutputStream(new FileOutputStream(fileOutput));
        byte[] buffer = new byte[1024];
        int len;
        while ((len = input.read(buffer)) > 0) {
            gzipOutput.write(buffer, 0, len);
        }
        input.close();
        gzipOutput.finish();
        gzipOutput.close();
        System.out.println("File successfully compressed.");
    }

}

上述代码使用 GZIP 压缩过滤流压缩文件。通过使用 GZIPOutputStream 将字节数据压缩成 gzip 文件。需要注意的是,输出流参数中传递的是 FileOutputStream,这是一种节点流,这也可以理解为是一种过滤流。

缓冲流

与过滤流相似,缓冲流(BufferStream)也是一种节点流,它包装了对其他输入输出流的操作,添加了缓存功能,以提高已有输入输出流的效率。所以,它提供了对读写大量数据时的缓存机制,避免了频繁读写硬盘等设备造成的性能问题。

缓冲流依然是与其他输入输出流配合使用的,常用的缓冲流包括BufferedInputStream 和 BufferedOutputStream。

示例2:从文件中读取大量数据

import java.io.*;

public class ReadFromFile {
    public static void main(String[] args) throws IOException {
        String file = "example.txt";
        int bufferSize = 8 * 1024;
        InputStream inputStream = new FileInputStream(file);
        BufferedInputStream bufferedInput = new BufferedInputStream(inputStream, bufferSize);
        byte[] bytes = new byte[bufferSize];
        int offset = 0;
        int numRead;
        while ((numRead = bufferedInput.read(bytes, offset, bufferSize)) > 0) {
            offset += numRead;
        }
        bufferedInput.close();
        System.out.println("File successfully read.");
    }
}

上述代码演示了如何通过缓冲流从文件中读取大量数据。通过使用 BufferedInputStream 及其构造方法的“bufferSize”参数指定缓冲区大小。例如本例中,缓冲大小被设定为 8kb,即缓冲区可以存储 8 * 1024 个字节。读取到的数据先全部存入缓冲区,再从缓冲区获取数据,避免了频繁读写硬盘等设备造成的性能问题,从而使文件的读写效率有了很大的提升。

Data流

Data流是Java IO中的一种数据源和数据目的地都是Java基本数据类型,与其他输入输出流不同,它不仅支持数据的读写,还提供了一些转换数据格式的方法,如 readInt() 和 writeInt() 方法,用于读写整数数据。

Java IO 中的 DataInputStream 和 DataOutputStream 是实现 Data流 的基础。DataOutputStream 提供了向输出流的方法,用来写入基本类型和字符串等常见类型数据;DataInputStream 提供了来自输入流的方法,用来读取和反序列化出写入到 DataOutputStream 中的类型数据。

示例3:读写基本数据类型

import java.io.*;

public class DataStreamExample {
    public static void main(String[] args) throws Exception {
        String dataFile = "example.txt";
        BufferedOutputStream bufferedOutput = new BufferedOutputStream(new FileOutputStream(dataFile));
        DataOutputStream dataOutput = new DataOutputStream(bufferedOutput);

        dataOutput.writeDouble(3.1415926);
        dataOutput.writeInt(1000000);
        dataOutput.writeBoolean(false);

        dataOutput.close();

        BufferedInputStream bufferedInput = new BufferedInputStream(new FileInputStream(dataFile));
        DataInputStream dataInput = new DataInputStream(bufferedInput);

        System.out.println(dataInput.readDouble());
        System.out.println(dataInput.readInt());
        System.out.println(dataInput.readBoolean());

        dataInput.close();
        System.out.println("File successfully read.");
    }
}

上述代码演示了如何使用 Data 输入输出流在文件中读取和写入基本数据类型。该例子首先创建一个文件,并将基本数据类型写入该文件。寻找数据逐个创建一个 DataInputStream,读取文件中的各个数据,再依交叉读取数据读取数据。最后,关闭 DataInputStream,道旁文件读取结束。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅析Java.IO输入输出流 过滤流 buffer流和data流 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • java实现jdbc查询结果集result转换成对应list集合

    将查询结果集result转换成对应的list集合是Java应用程序开发中经常需要实现的任务之一。下面是具体的步骤: 1. 引入相关的依赖 如果你使用的是Maven项目,需要在pom.xml文件中引入相关依赖。例如,引入mysql-connector-java驱动程序,可以添加以下依赖: <dependency> <groupId>my…

    Java 2023年6月16日
    00
  • SpringBoot+MybatisPlus+代码生成器整合示例

    下面是详细讲解“SpringBoot+MybatisPlus+代码生成器整合示例”的完整攻略。 准备工作 首先需要创建一个SpringBoot项目。在pom.xml文件中添加MybatisPlus和代码生成器的依赖。 <dependency> <groupId>com.baomidou</groupId> <arti…

    Java 2023年5月19日
    00
  • 如何通过Java实现加密、解密Word文档

    要通过Java实现加密和解密Word文档,需要进行以下步骤: 添加依赖在Java项目中,需要添加依赖,包括poi-ooxml和poi-ooxml-schemas。可以在Maven、Gradle等项目管理工具中添加依赖,也可以直接在项目中使用jar包。 加密Word文档加密Word文档需要使用Apache POI库。首先需要创建一个POIFSFileSyste…

    Java 2023年5月26日
    00
  • CentOS 7 配置Tomcat9+MySQL方案

    下面是CentOS 7配置Tomcat9+MySQL的完整攻略: 1. 安装Java环境 Tomcat运行需要先安装Java环境。可以使用以下命令安装OpenJDK: sudo yum install java-1.8.0-openjdk-devel 安装完成后,可以使用以下命令检查Java版本: java -version 2. 安装Tomcat9 可以使…

    Java 2023年5月19日
    00
  • Java实现的计时器【秒表】功能示例

    Java实现计时器【秒表】功能示例攻略 1. 功能概述 Java实现计时器功能的主要思路是通过多线程实现,秒表的开始、暂停、重置等功能可以通过控制线程状态来实现。具体需要实现以下功能:- 开始计时:启动一个新线程,用于定时更新计时器的时间并显示在界面上。- 暂停计时:暂停计时器的定时更新线程,但计时器的时间不变。- 重置计时:将计时器的时间重置为0,同时将计…

    Java 2023年5月19日
    00
  • java实现八皇后问题示例分享

    下面就是详细的 “java实现八皇后问题示例分享”攻略: 一、什么是八皇后问题? 八皇后问题是指在一个8×8的棋盘上,放置八个皇后,要求每个皇后不在同一行、同一列、同一对角线上。这是一个具有挑战性的问题,因为需要保证所有的皇后不在同一位置,且这种解法必须满足复杂的限制条件。 二、问题分析 1.问题变量定义 为了解决问题,首先需要定义棋盘以及皇后的位置,即对问…

    Java 2023年5月26日
    00
  • Java 判断一个时间是否在另一个时间段内

    下面我就来详细讲解一下 “Java 判断一个时间是否在另一个时间段内” 的完整攻略。 1. 获取时间和时间段 首先,我们需要获取到我们要比较的时间和时间段。在Java中,可以使用以下两种方式来获取时间和时间段: (1)Date类型 Java中Date类表示一个时间点,可以使用new Date()来获取当前时间。如果需要指定具体的时间可以使用new Date(…

    Java 2023年5月20日
    00
  • 详解JAVA 字节流和字符流

    详解JAVA 字节流和字符流 在JAVA中,流是指一种数据传输方式,可以从一个地方读入数据并传输到另一个地方,或者从一个地方写数据到另一个地方。在JAVA中,根据数据类型的不同,流分为字节流和字符流两种类型。本文将详细讲解JAVA 字节流和字符流的特点,使用场景以及相关常用类的详细使用方法。 字节流与字符流 字节流 JAVA中的字节流,是用于处理字节数据的I…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部