文章目录
- 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是一种输出流。
同样,输入流用于输入。
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.