了解Java InputStream和OutputStream类

本文介绍了Java中的流概念,包括字节流和字符流,并详细解释了InputStream和OutputStream类及其子类的使用方法,通过示例展示了如何进行文件的读取与写入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在Java中,流是从源读取并写入到目的地的数据序列。
    输入流用于从源读取数据,输出流用于将数据写入目标。

class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!"); 
    }
}

    例如,在我们的第一个Hello World示例中,我们曾使用过System.out打印字符串。在此,System.out是一种输出流。
    同样,输入流用于输入。
在这里插入图片描述

1. 流的种类

    根据流包含的数据,可以将流分为字节流(Byte Stream)和字符流(Character Stream)。

1.1 字节流

    字节流用于读写单个字节(8位)的数据。所有字节流类都是从名为InputStream和OutputStream的基本抽象类派生的。

1.2 字符流

    字符流用于读取和写入单个数据字符。所有字符流类都是从基本抽象类Reader和Writer派生的。

2. Java InputStream类

    在本节中,我们将通过一个示例来学习Java InputStream类及其方法。
    InputStream类是java.io包的一个抽象超类,它代表字节的输入流.由于InputStream是抽象类,因此它不能被使用。但是,其子类可用于读取数据。

2.1 InputStream的子类

    为了使用InputStream的功能,我们可以使用其子类,如:

  • FileInputStream
  • ByteArrayInputStream
  • ObjectInputStream

在这里插入图片描述

2.2 创建一个InputStream

    为了创建InputStream,我们必须首先导入java.io.InputStream包。导入包后,就可以创建输入流。

// Creates an InputStream
InputStream object1 = new FileInputStream();

    在这里,我们使用FileInputStream创建了一个输入流。这是因为InputStream是一个抽象类,我们无法创建InputStream的对象。注意:我们还可以从InputStream的其他子类创建输入流。

2.3 InputStream的方法

    InputStream类提供不同方法,这些方法由其子类实现。以下是一些常用的方法:

  • read() - 从输入流中读取一个字节的数据
  • read(byte[] array) - 从流中读取字节并存储在指定的数组中
  • available() - 返回输入流中可用的字节数
  • mark() - 标记输入流中数据已被读取到的位置
  • reset() - 返回流中设置mark标记的点
  • markSupported() - 检查流中是否支持mark()和reset()方法
  • skips() - 跳过并丢弃输入流中指定的字节数
  • close() - 关闭输入流
2.4 示例:使用InputStream的FileInputStream

    下面是如何使用FileInputStream类实现InputStream。
    假设我们有一个名为input.txt的文件,包含以下内容:

This is a line of text inside the file.

    让我们尝试使用FileInputStream(InputStream的子类)读取此文件。

import java.io.FileInputStream;
import java.io.InputStream;

public class Main {
    public static void main(String args[]) {

        byte[] array = new byte[100];

        try {
            InputStream input = new FileInputStream("input.txt");

            System.out.println("Available bytes in the file: " + input.available());

            // Read byte from the input stream
            input.read(array);
            
            // Convert byte array into string
            System.out.println("Data read from the file: ");
            String data = new String(array);
            System.out.println(data);

            // Close the input stream
            input.close();
        }
        catch (Exception e) {
            e.getStackTrace();
        }
    }
}

    输出为:

Available bytes in the file: 35
Data read from the file:
This is a line of text inside the file

    在上面的示例中,我们使用FileInputStream类创建了输入流。输入流与input.txt文件链接。

InputStream input = new FileInputStream("input.txt");

    为了从input.txt文件中读取数据,我们实现了这两种方法:

input.read(array);      // to read data from the input stream
input.close();             // to close the input stream
3. Java OutputStream类

    在本节中,我们将通过一个示例学习Java OutputStream及其方法。
    java.io包的OutputStream类是一个抽象超类,它表示字节的输出流。由于OutputStream是抽象类,因此它本身没有用。但是,其子类可用于写入数据。

3.1 OutputStream的子类

    为了使用OutputStream的功能,我们可以使用其子类,包括:

  • FileOutputStream
  • ByteArrayOutputStream
  • ObjectOutputStream

在这里插入图片描述

3.2 创建一个OutputStream

    为了创建OutputStream,我们必须先导入java.io.OutputStream包。导入包后,就可以创建输出流。

// Creates an OutputStream
OutputStream object = new FileOutputStream();

    在这里,我们使用FileOutputStream创建了一个输出流对象。因为OutputStream是一个抽象类,所以我们不能创建OutputStream的对象。
    注意:我们还可以从OutputStream类的其他子类创建输出流。

3.3 OutputStream的方法

    OutputStream类提供多种不同方法,方法由OutputStream子类实现。以下是一些方法:

  • write() - 将指定的字节写入输出流
  • write(byte[] array) - 将指定数组中的字节写入输出流
  • flush() - 强制将输出流中存在的所有数据写入目标
  • close() - 关闭输出流
3.4 示例:使用OutputStream的FileOutputStream

    下面是如何使用FileOutputStream类实现OutputStream。

import java.io.FileOutputStream;
import java.io.OutputStream;

public class Main {

    public static void main(String args[]) {
        String data = "This is a line of text inside the file.";

        try {
            OutputStream out = new FileOutputStream("output.txt");

            // Converts the string into bytes
            byte[] dataBytes = data.getBytes();

            // Writes data to the output stream
            out.write(dataBytes);
            System.out.println("Data is written to the file.");

            // Closes the output stream
            out.close();
        }

        catch (Exception e) {
            e.getStackTrace();
        }
    }
}

    在上面的示例中,我们使用FileOutputStream类创建了一个输出流。现在,输出流已与文件output.txt链接。

OutputStream out = new FileOutputStream("output.txt");

    要将数据写入output.txt文件,我们实现了这些方法:

output.write();      // To write data to the file
output.close();      // To close the output stream

    当我们运行程序时,output.txt文件将填充以下内容。

This is a line of text inside the file.

    很久没更新原创了,非常抱歉。最近在学习Java,感觉还没到值得输出原创的地步,所以这段时间以翻译文章为主。

参考文档

[1]Parewa Labs Pvt.Java InputStream Class[EB/OL].https://www.programiz.com/java-programming/inputstream,2020-01-01.
[2]Parewa Labs Pvt.Java OutputStream Class[EB/OL].https://www.programiz.com/java-programming/outputstream,2020-01-01.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值