Java中的输入输出流(I_O)详解
发布时间: 2023-12-19 21:54:40 阅读量: 10 订阅数: 11
# 1. 简介
## 1.1 什么是输入输出流(I_O)
输入输出流(I/O)是用于读取数据和写入数据的抽象概念。在计算机中,所有设备(如磁盘驱动器、键盘、显示器等)都被视为一个流,数据从一个流传输到另一个流。输入流用于从设备中读取数据,输出流用于向设备中写入数据。
## 1.2 输入输出流的作用
输入输出流的主要作用是从源读取数据并将数据传输到目标。数据源可以是文件、内存、网络连接或其他设备,而目标可以是文件、内存、网络连接或打印机等。
## 1.3 输入输出流的类型
输入输出流可以分为字节流和字符流。字节流以字节为单位读取和写入数据,适用于处理二进制数据,字符流以字符为单位读取和写入数据,适用于处理文本数据。
在接下来的章节中,我们将深入探讨输入流、输出流、字符流以及缓冲流的概念、应用和示例。
# 2. 输入流(InputStream)
输入流(InputStream)是Java I/O中用于从数据源中读取数据的抽象类。它是所有输入流的基类,提供了一些基本的方法用于读取字节数据。
### 2.1 InputStream的基本概念
InputStream提供了以下几种基本的方法:
- `int read()`: 从输入流中读取一个字节的数据,并返回读取的字节(0-255),如果已达到输入流的末尾,则返回-1。
- `int read(byte[] b)`: 从输入流中读取数据到字节数组b中,并返回实际读取的字节数。如果已达到输入流的末尾,则返回-1。
- `int read(byte[] b, int off, int len)`: 从输入流中读取数据到字节数组b中的指定位置,并返回实际读取的字节数。off表示偏移量,len表示读取的字节数。如果已达到输入流的末尾,则返回-1。
- `long skip(long n)`: 跳过n个字节的数据。
- `int available()`: 返回输入流中可读取的字节数。
- `void close()`: 关闭输入流。
### 2.2 InputStream的常用子类
Java提供了几个常用的InputStream的子类,用于读取不同的数据源,包括文件、网络连接、内存等。
- FileInputStream:用于读取文件的输入流。
- ByteArrayInputStream:用于读取内存中的数据的输入流。
- SocketInputStream:用于读取网络套接字的输入流。
- ...
### 2.3 InputStream的使用示例
下面是一个使用FileInputStream读取文件的示例代码:
```java
import java.io.FileInputStream;
import java.io.IOException;
public class InputStreamExample {
public static void main(String[] args) {
FileInputStream fis = null;
try {
fis = new FileInputStream("input.txt");
int data;
while ((data = fis.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
```
上述代码中,我们使用FileInputStream来读取名为`input.txt`的文件。通过`fis.read()`方法读取文件中的字节数据,并将其转换为字符输出。最后,再通过`fis.close()`方法关闭输入流。
这是一个简单的输入流示例,通过这种方式我们可以读取文件中的数据并进行处理。在实际开发中,我们可以根据需要选择合适的子类来读取不同的数据源。
# 3. 输出流(OutputStream)
#### 3.1 OutputStream的基本概念
在Java中,OutputStream是抽象类,用于表示字节输出流。它是所有字节输出流的父类,提供了写入字节的基本方法。
#### 3.2 OutputStream的常用子类
一些常用的子类包括:
- `FileOutputStream`:用于将数据写入文件。
- `ByteArrayOutputStream`:在内存中创建一个字节数组缓冲区,所有数据将写入到这个缓冲区中。
- `DataOutputStream`:用于将Java基本数据类型写入输出流。
#### 3.3 OutputStream的使用示例
下面是一个简单的示例,演示了如何使用`FileOutputStream`将数据写入文件:
```java
import java.io.*;
public class OutputStreamEx
```
0
0