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 流的基本使用方法和示例代码。