javaio流知识点详细讲解
时间: 2023-09-02 10:09:56 浏览: 128
好的,让我来详细讲解一下Java IO流的知识点。
Java IO(Input/Output)流是Java用于处理输入输出的机制。它提供了一种标准的方法来处理与文件、网络连接、管道等相关的操作。
Java IO流被分为两类:字节流和字符流。
- 字节流:以字节为单位进行读写操作,适用于二进制文件或以字节为基础的文本文件的读写操作。字节流主要包括InputStream和OutputStream两个类。
- 字符流:以字符为单位进行读写操作,适用于以字符为基础的文本文件的读写操作。字符流主要包括Reader和Writer两个类。
Java IO流的常用类有:
1. FileInputStream 和 FileOutputStream
FileInputStream 和 FileOutputStream 是用于读写文件的字节流。FileInputStream 可以打开一个文件,读取其中的内容;FileOutputStream 可以打开一个文件,将内容写入文件中。示例代码如下:
```java
try (FileInputStream fis = new FileInputStream("input.txt");
FileOutputStream fos = new FileOutputStream("output.txt")) {
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
```
2. FileReader 和 FileWriter
FileReader 和 FileWriter 是用于读写文件的字符流。FileReader 可以打开一个文件,读取其中的内容;FileWriter 可以打开一个文件,将内容写入文件中。示例代码如下:
```java
try (FileReader fr = new FileReader("input.txt");
FileWriter fw = new FileWriter("output.txt")) {
char[] buffer = new char[1024];
int len;
while ((len = fr.read(buffer)) != -1) {
fw.write(buffer, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
```
3. ByteArrayInputStream 和 ByteArrayOutputStream
ByteArrayInputStream 和 ByteArrayOutputStream 是用于读写内存中的字节流。ByteArrayInputStream 可以从一个字节数组中读取内容;ByteArrayOutputStream 可以将内容写入一个字节数组中。示例代码如下:
```java
byte[] data = "Hello, world!".getBytes();
try (ByteArrayInputStream bais = new ByteArrayInputStream(data);
ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
byte[] buffer = new byte[1024];
int len;
while ((len = bais.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
byte[] result = baos.toByteArray();
System.out.println(new String(result));
} catch (IOException e) {
e.printStackTrace();
}
```
4. CharArrayReader 和 CharArrayWriter
CharArrayReader 和 CharArrayWriter 是用于读写内存中的字符流。CharArrayReader 可以从一个字符数组中读取内容;CharArrayWriter 可以将内容写入一个字符数组中。示例代码如下:
```java
char[] data = "Hello, world!".toCharArray();
try (CharArrayReader car = new CharArrayReader(data);
CharArrayWriter caw = new CharArrayWriter()) {
char[] buffer = new char[1024];
int len;
while ((len = car.read(buffer)) != -1) {
caw.write(buffer, 0, len);
}
char[] result = caw.toCharArray();
System.out.println(new String(result));
} catch (IOException e) {
e.printStackTrace();
}
```
5. BufferedReader 和 BufferedWriter
BufferedReader 和 BufferedWriter 是用于带缓存的读写字符流。示例代码如下:
```java
try (BufferedReader br = new BufferedReader(new FileReader("input.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
```
6. DataInputStream 和 DataOutputStream
DataInputStream 和 DataOutputStream 是用于读写基本数据类型和字符串。示例代码如下:
```java
try (DataInputStream dis = new DataInputStream(new FileInputStream("data.bin"));
DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.bin"))) {
dos.writeInt(123);
dos.writeUTF("Hello, world!");
int num = dis.readInt();
String str = dis.readUTF();
System.out.println(num + ", " + str);
} catch (IOException e) {
e.printStackTrace();
}
```
7. ObjectInputStream 和 ObjectOutputStream
ObjectInputStream 和 ObjectOutputStream 是用于读写Java对象。示例代码如下:
```java
class Person implements Serializable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.bin"));
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.bin"))) {
Person p1 = new Person("Alice", 18);
oos.writeObject(p1);
Person p2 = (Person) ois.readObject();
System.out.println(p2);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
```
Java IO流在处理文件、网络连接、管道等方面具有广泛的应用,是Java编程不可或缺的一部分。
阅读全文