浅析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中常用的代码汇总

    Java中常用的代码汇总攻略 Java是一门非常流行的编程语言,具有非常强大的功能。在Java编程过程中,我们会用到很多常用的代码。本篇攻略将为您总结Java中常用的代码,让您更加轻松地应对编程工作。 基本语法 定义变量 定义变量是Java编程的基本语法之一,与其他编程语言相似。定义变量时,我们需要声明变量的数据类型以及变量名称。例如: int i = 10…

    Java 2023年5月23日
    00
  • spring整合redis以及使用RedisTemplate的方法

    Spring整合Redis以及使用RedisTemplate的方法 什么是Redis? Redis是一个开源的,高级的、基于内存的NoSQL数据库,常用于缓存、队列、分布式锁等应用。它支持多种数据结构,如字符串、哈希表、列表、集合、有序集合等。 Spring整合Redis 1. 环境搭建 首先需要引入Spring Data Redis模块,以及Jedis或L…

    Java 2023年5月19日
    00
  • JavaSpringBoot报错“ClassNotFoundException”的原因和处理方法

    原因 “ClassNotFoundException” 错误通常是以下原因引起的: 类路径不正确:如果您的类路径不正确,则可能会出现此错误。在这种情况下,需要检查您的类路径并确保它们正确。 缺少依赖项:如果您的依赖项缺失,则可能会出现此错误。在这种情况下,需要检查您的依赖项并确保它们存在。 解决办法 以下是解决 “ClassNotFoundException…

    Java 2023年5月4日
    00
  • java语言中封装类代码示例

    封装是Java中的一种特性,它将数据和方法作为一个整体封装在一个类中,从而实现了对象的封装和保护。在Java中,我们可以使用封装类来完成一些复杂数据类型的封装。下面是Java语言中封装类的代码示例攻略: 1. 创建封装类 创建一个封装类的关键在于定义一个类,并在类中定义私有变量和公有方法。私有变量可以通过公有方法来获取或修改。以下是一个简单的封装类示例: p…

    Java 2023年5月23日
    00
  • 教你怎么实现java语言的在线编译

    下面我将详细讲解如何实现 Java 语言的在线编译。 简介 在线编译指的是通过网页或应用程序向远程服务器提交代码,服务器将代码编译并执行,并将执行结果返回给用户的一种服务。Java 是一种常用的编程语言,下面将介绍如何实现 Java 语言的在线编译。 实现步骤 第一步:准备工作 实现 Java 的在线编译,我们需要以下几个工具:* JDK(Java Deve…

    Java 2023年5月19日
    00
  • jsp 获取客户端的浏览器和操作系统信息

    要获取客户端的浏览器和操作系统信息,可以通过一些技术手段进行实现。在jsp中,可以通过以下步骤来获取。 第一步,获取客户端的UserAgent信息。UserAgent是每个浏览器都有的一个HTTP头部信息,它描述了客户端浏览器的相关信息。在jsp中,可以通过以下代码来获取UserAgent信息。 String userAgent = request.getH…

    Java 2023年6月15日
    00
  • java反编译工具Bytecode-Viewer分享

    Java反编译工具Bytecode-Viewer分享 介绍 Bytecode-Viewer是一款开放源码的Java反编译工具,支持多种不同的字节码格式并能够轻松破解Java代码。 安装和运行 下载Bytecode-Viewer的安装包并解压缩。 双击运行安装包,按照安装向导完成安装。 运行安装后的Bytecode-Viewer程序。 使用方法 打开Java字…

    Java 2023年5月26日
    00
  • java编程小白进阶包的作用详解

    Java编程小白进阶包的作用详解 简介 Java编程小白进阶包是一个帮助Java初学者进阶的工具包,它包括了大量实用的工具类和基础知识的讲解,可以快速提升初学者的编程水平。 功能 Java编程小白进阶包的主要功能包括: 1. 工具类 Java编程小白进阶包提供了很多实用的工具类,例如字符串处理、日期时间处理、集合操作等等。这些工具类都经过了精心设计和优化,可…

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