文章目录

  • 1. 流的种类
  • 1.1 字节流
  • 1.2 字符流
  • 2. Java InputStream类
  • 2.1 InputStream的子类
  • 2.2 创建一个InputStream
  • 2.3 InputStream的方法
  • 2.4 示例:使用InputStream的FileInputStream
  • 3. Java OutputStream类
  • 3.1 OutputStream的子类
  • 3.2 创建一个OutputStream
  • 3.3 OutputStream的方法
  • 3.4 示例:使用OutputStream的FileOutputStream
  • 参考文档


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

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

    例如,在我们的第一个Hello World示例中,我们曾使用过System.out打印字符串。在此,System.out是一种输出流。

    同样,输入流用于输入。

InputStream编码 java java inputstream类_InputStream

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

InputStream编码 java java inputstream类_OutputStream_02

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

InputStream编码 java java inputstream类_InputStream_03

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.