13.0、Java_IO流 - 数据流
**Java IO 流 - 数据流**
在 Java 中,IO 流(Input/Output Stream)是用于读取和写入数据的基本类。它提供了一个抽象层,使得程序可以与外部世界进行交互。IO 流分为两大类:输入流(InputStream)和输出流(OutputStream)。
**1. 输入流(InputStream)**
输入流用于从外部世界读取数据,例如从文件、网络或键盘等来源。Java 中的输入流有以下几种类型:
* `ByteArrayInputStream`:一个字节数组输入流。
* `FileInputStream`:一个文件输入流。
* `ObjectInputStream`:一个对象输入流。
* `PipedInputStream`:一个管道输入流。
**2. 输出流(OutputStream)**
输出流用于向外部世界写入数据,例如到文件、网络或打印机等目的地。Java 中的输出流有以下几种类型:
* `ByteArrayOutputStream`:一个字节数组输出流。
* `FileOutputStream`:一个文件输出流。
* `ObjectOutputStream`:一个对象输出流。
* `PipedOutputStream`:一个管道输出流。
**3. 缓冲流(BufferedInputStream和BufferedOutputStream)**
缓冲流是对输入流或输出流的包装类,用于提高读取和写入速度。它通过在内存中缓存数据来实现这一点。
* `BufferedInputStream`:一个缓冲输入流。
* `BufferedOutputStream`:一个缓冲输出流。
**4. 转换流(FilterInputStream和FilterOutputStream)**
转换流是对输入流或输出流的包装类,用于改变数据的格式。它通过在读取或写入过程中进行转换来实现这一点。
* `FilterInputStream`:一个转换输入流。
* `FilterOutputStream`:一个转换输出流。
**5. 数据流(DataInputStream和DataOutputStream)**
数据流是对输入流或输出流的包装类,用于读取和写入基本类型的数据。它通过提供读取和写入基本类型的方法来实现这一点。
* `DataInputStream`:一个数据输入流。
* `DataOutputStream`:一个数据输出流。
**示例代码**
###读取文件
javaimport java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class ReadFile {
public static void main(String[] args) throws IOException {
// 指定文件路径 String filePath = "test.txt";
// 创建一个文件输入流 FileInputStream fileInputStream = new FileInputStream(filePath);
//读取文件内容 byte[] bytes = new byte[1024];
int len;
while ((len = fileInputStream.read(bytes)) != -1) {
System.out.println(new String(bytes,0, len));
}
// 关闭输入流 fileInputStream.close();
}
}
### 写入文件
javaimport java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class WriteFile {
public static void main(String[] args) throws IOException {
// 指定文件路径 String filePath = "test.txt";
// 创建一个文件输出流 FileOutputStream fileOutputStream = new FileOutputStream(filePath);
// 写入内容 String content = "Hello, World!";
byte[] bytes = content.getBytes();
fileOutputStream.write(bytes);
// 关闭输出流 fileOutputStream.close();
}
}
### 使用缓冲流
javaimport java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class UseBuffer {
public static void main(String[] args) throws IOException {
// 指定文件路径 String filePath = "test.txt";
// 创建一个缓冲输入流 FileInputStream fileInputStream = new FileInputStream(filePath);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
//读取内容 byte[] bytes = new byte[1024];
int len;
while ((len = bufferedInputStream.read(bytes)) != -1) {
System.out.println(new String(bytes,0, len));
}
// 关闭输入流 bufferedInputStream.close();
// 创建一个缓冲输出流 FileOutputStream fileOutputStream = new FileOutputStream(filePath);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
// 写入内容 String content = "Hello, World!";
byte[] bytes2 = content.getBytes();
bufferedOutputStream.write(bytes2);
// 关闭输出流 bufferedOutputStream.close();
}
}
### 使用转换流
javaimport java.io.FilterInputStream;
import java.io.FilterOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class UseFilter {
public static void main(String[] args) throws IOException {
// 指定文件路径 String filePath = "test.txt";
// 创建一个转换输入流 FileInputStream fileInputStream = new FileInputStream(filePath);
FilterInputStream filterInputStream = new FilterInputStream(fileInputStream);
//读取内容 byte[] bytes = new byte[1024];
int len;
while ((len = filterInputStream.read(bytes)) != -1) {
System.out.println(new String(bytes,0, len));
}
// 关闭输入流 filterInputStream.close();
// 创建一个转换输出流 FileOutputStream fileOutputStream = new FileOutputStream(filePath);
FilterOutputStream filterOutputStream = new FilterOutputStream(fileOutputStream);
// 写入内容 String content = "Hello, World!";
byte[] bytes2 = content.getBytes();
filterOutputStream.write(bytes2);
// 关闭输出流 filterOutputStream.close();
}
}
### 使用数据流
javaimport java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class UseData {
public static void main(String[] args) throws IOException {
// 指定文件路径 String filePath = "test.txt";
// 创建一个数据输入流 FileInputStream fileInputStream = new FileInputStream(filePath);
DataInputStream dataInputStream = new DataInputStream(fileInputStream);
//读取基本类型的数据 int i = dataInputStream.readInt();
double d = dataInputStream.readDouble();
boolean b = dataInputStream.readBoolean();
System.out.println(i + ", " + d + ", " + b);
// 关闭输入流 dataInputStream.close();
// 创建一个数据输出流 FileOutputStream fileOutputStream = new FileOutputStream(filePath);
DataOutputStream dataOutputStream = new DataOutputStream(fileOutputStream);
// 写入基本类型的数据 int i2 =123;
double d2 =456.789;
boolean b2 = true;
dataOutputStream.writeInt(i2);
dataOutputStream.writeDouble(d2);
dataOutputStream.writeBoolean(b2);
// 关闭输出流 dataOutputStream.close();
}
}
以上是Java IO 流的基本使用方法和示例代码。

