在Java中,流是从源读取并写入到目的地的数据序列。 输入流用于从源读取数据,输出流用于将数据写入目标。
class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }例如,在我们的第一个Hello World示例中,我们曾使用过System.out打印字符串。在此,System.out是一种输出流。 同样,输入流用于输入。
根据流包含的数据,可以将流分为字节流(Byte Stream)和字符流(Character Stream)。
字节流用于读写单个字节(8位)的数据。所有字节流类都是从名为InputStream和OutputStream的基本抽象类派生的。
字符流用于读取和写入单个数据字符。所有字符流类都是从基本抽象类Reader和Writer派生的。
在本节中,我们将通过一个示例来学习Java InputStream类及其方法。 InputStream类是java.io包的一个抽象超类,它代表字节的输入流.由于InputStream是抽象类,因此它不能被使用。但是,其子类可用于读取数据。
为了使用InputStream的功能,我们可以使用其子类,如:
FileInputStreamByteArrayInputStreamObjectInputStream为了创建InputStream,我们必须首先导入java.io.InputStream包。导入包后,就可以创建输入流。
// Creates an InputStream InputStream object1 = new FileInputStream();在这里,我们使用FileInputStream创建了一个输入流。这是因为InputStream是一个抽象类,我们无法创建InputStream的对象。注意:我们还可以从InputStream的其他子类创建输入流。
InputStream类提供不同方法,这些方法由其子类实现。以下是一些常用的方法:
read() - 从输入流中读取一个字节的数据read(byte[] array) - 从流中读取字节并存储在指定的数组中available() - 返回输入流中可用的字节数mark() - 标记输入流中数据已被读取到的位置reset() - 返回流中设置mark标记的点markSupported() - 检查流中是否支持mark()和reset()方法skips() - 跳过并丢弃输入流中指定的字节数close() - 关闭输入流下面是如何使用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在本节中,我们将通过一个示例学习Java OutputStream及其方法。 java.io包的OutputStream类是一个抽象超类,它表示字节的输出流。由于OutputStream是抽象类,因此它本身没有用。但是,其子类可用于写入数据。
为了使用OutputStream的功能,我们可以使用其子类,包括:
FileOutputStreamByteArrayOutputStreamObjectOutputStream为了创建OutputStream,我们必须先导入java.io.OutputStream包。导入包后,就可以创建输出流。
// Creates an OutputStream OutputStream object = new FileOutputStream();在这里,我们使用FileOutputStream创建了一个输出流对象。因为OutputStream是一个抽象类,所以我们不能创建OutputStream的对象。 注意:我们还可以从OutputStream类的其他子类创建输出流。
OutputStream类提供多种不同方法,方法由OutputStream子类实现。以下是一些方法:
write() - 将指定的字节写入输出流write(byte[] array) - 将指定数组中的字节写入输出流flush() - 强制将输出流中存在的所有数据写入目标close() - 关闭输出流下面是如何使用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.