每文一句
每想拥抱你一次,天空飘落一片雪,至此雪花拥抱撒哈拉! —荷西
一、IO流开篇
1. 概念:
IO(Input/Output)流是Java中用于处理输入和输出数据的机制。它允许程序与外部设备(如文件、网络连接、内存等)进行数据交换。IO流按照操作单位的不同可以分为字节流和字符流两种类型。
2. 流的分类:
字节流(Byte Streams):以字节为单位进行操作,适用于处理二进制数据或不需要进行字符编码转换的场景。主要的字节流类包括InputStream和OutputStream及其子类。字符流(Character Streams):以字符为单位进行操作,适用于处理文本数据并支持字符编码转换。主要的字符流类包括Reader和Writer及其子类。
3. IO流的作用:
实现数据的输入和输出:通过IO流,可以从外部源中读取数据到程序中,或者将程序中的数据写入到外部源中。处理文件操作:可以通过IO流读取、写入文件,实现文件的读取、写入和操作。网络通信:通过IO流可以实现网络通信,包括建立Socket连接、传输数据等。
4. IO流的使用场景:
文件操作:读取、写入和处理文件。网络编程:建立Socket连接,进行网络通信。数据处理:通过IO流实现数据的输入、输出和处理,包括序列化、反序列化等操作。图像处理:读取、写入图像文件,并进行图像处理操作。
二、字节流
字节流常用类
字节流是Java中处理字节数据的流,主要用于处理二进制数据或不需要进行字符编码转换的情况。以下是常用的字节流类:
1. InputStream(输入流)及其子类:
FileInputStream:用于从文件中读取数据的输入流。ByteArrayInputStream:从内存中的字节数组中读取数据的输入流。BufferedInputStream:带有缓冲区的输入流,可以提高读取性能。DataInputStream:读取基本数据类型的输入流,例如int、double等。ObjectInputStream:用于反序列化对象的输入流,可以将对象从字节流中恢复为原来的对象。
2. OutputStream(输出流)及其子类:
FileOutputStream:用于向文件中写入数据的输出流。ByteArrayOutputStream:将数据写入到内存中的字节数组的输出流。BufferedOutputStream:带有缓冲区的输出流,可以提高写入性能。DataOutputStream:写入基本数据类型的输出流,例如int、double等。ObjectOutputStream:用于序列化对象的输出流,可以将对象转换为字节流进行持久化存储。
字节流使用案例
1. FileInputStream(文件输入流):
简单介绍: 用于从文件中读取数据的输入流。应用场景: 读取文件内容,进行数据处理和分析。代码演示:import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("example.txt")) {
int data;
while ((data = fis.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2. FileOutputStream(文件输出流):
简单介绍: 用于向文件中写入数据的输出流。应用场景: 将程序中的数据写入文件,如日志记录、数据持久化等。代码演示:import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamExample {
public static void main(String[] args) {
String data = "Hello, FileOutputStream!";
try (FileOutputStream fos = new FileOutputStream("output.txt")) {
fos.write(data.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
3. ByteArrayInputStream(字节数组输入流):
简单介绍: 从字节数组中读取数据的输入流。应用场景: 将字节数组作为数据源,进行数据的读取和处理。代码演示:import java.io.ByteArrayInputStream;
import java.io.IOException;
public class ByteArrayInputStreamExample {
public static void main(String[] args) {
byte[] bytes = {72, 101, 108, 108, 111};
try (ByteArrayInputStream bais = new ByteArrayInputStream(bytes)) {
int data;
while ((data = bais.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
4. ByteArrayOutputStream(字节数组输出流):
简单介绍: 将数据写入到字节数组的输出流。应用场景: 将程序中的数据写入字节数组,便于数据传输和处理。代码演示:import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class ByteArrayOutputStreamExample {
public static void main(String[] args) {
String data = "Hello, ByteArrayOutputStream!";
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
baos.write(data.getBytes());
byte[] result = baos.toByteArray();
System.out.println(new String(result));
} catch (IOException e) {
e.printStackTrace();
}
}
}
5. BufferedInputStream(缓冲输入流):
简单介绍: 带有缓冲区的输入流,提高读取性能。应用场景: 从文件中读取大量数据时,通过缓冲区减少IO操作次数,提升读取效率。代码演示:import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class BufferedInputStreamExample {
public static void main(String[] args) {
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("example.txt"))) {
int data;
while ((data = bis.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
6. BufferedOutputStream(缓冲输出流):
简单介绍: 带有缓冲区的输出流,提高写入性能。应用场景: 向文件中写入大量数据时,通过缓冲区减少IO操作次数,提升写入效率。代码演示:import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class BufferedOutputStreamExample {
public static void main(String[] args) {
String data = "Hello, BufferedOutputStream!";
try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("output.txt"))) {
bos.write(data.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
7. DataInputStream(数据输入流):
简单介绍: 读取基本数据类型的数据的输入流。应用场景: 读取通过DataOutputStream写入的基本数据类型数据。代码演示:import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class DataInputStreamExample {
public static void main(String[] args) {
try (DataInputStream dis = new DataInputStream(new FileInputStream("data.bin"))) {
int intValue = dis.readInt();
double doubleValue = dis.readDouble();
System.out.println("Int value: " + intValue);
System.out.println("Double value: " + doubleValue);
} catch (IOException e) {
e.printStackTrace();
}
}
}
8. DataOutputStream(数据输出流):
简单介绍: 将基本数据类型的数据写入文件的输出流。应用场景: 将程序中的基本数据类型数据写入文件,便于持久化存储。代码演示:import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class DataOutputStreamExample {
public static void main(String[] args) {
try (DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.bin"))) {
int intValue = 42;
double doubleValue = 3.14;
dos.writeInt(intValue);
dos.writeDouble(doubleValue);
} catch (IOException e) {
e.printStackTrace();
}
}
}
9. ObjectInputStream(对象输入流):
简单介绍: 用于反序列化对象的输入流,可以将对象从字节流中恢复为原来的对象。应用场景: 用于读取通过 ObjectOutputStream 序列化的对象数据,恢复为原来的对象。代码演示:import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class ObjectInputStreamExample {
public static void main(String[] args) {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.bin"))) {
// 从文件中读取对象
MyClass obj = (MyClass) ois.readObject();
System.out.println("Object read from file: " + obj);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
10. ObjectOutputStream(对象输出流):
简单介绍: 用于将对象序列化为字节流并写入文件的输出流,可以将对象持久化存储。应用场景: 用于将程序中的对象数据序列化为字节流,保存到文件中或传输到网络。代码演示:import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class ObjectOutputStreamExample {
public static void main(String[] args) {
MyClass obj = new MyClass("John", 30);
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.bin"))) {
// 将对象写入文件
oos.writeObject(obj);
System.out.println("Object written to file: " + obj);
} catch (IOException e) {
e.printStackTrace();
}
}
}
三、字符流
字符流常用类
字符流是Java中处理字符数据的流,主要用于处理文本数据并支持字符编码转换。以下是常用的字符流类:
1. Reader(读取字符流)及其子类:
FileReader:从文件中读取字符数据的字符输入流。BufferedReader:带有缓冲区的字符输入流,提高读取性能。InputStreamReader:将字节流转换为字符流的桥梁,支持指定字符编码。StringReader:从字符串中读取字符数据的字符输入流。
2. Writer(写入字符流)及其子类:
FileWriter:向文件中写入字符数据的字符输出流。BufferedWriter:带有缓冲区的字符输出流,提高写入性能。OutputStreamWriter:将字符流转换为字节流的桥梁,支持指定字符编码。StringWriter:将字符数据写入到字符串中的字符输出流。
字符流使用案例
1. FileReader(文件读取字符流):
简单介绍: 用于从文件中读取字符数据的字符输入流。应用场景: 读取文本文件中的内容,进行处理或分析。代码演示:import java.io.FileReader;
import java.io.IOException;
public class FileReaderExample {
public static void main(String[] args) {
try (FileReader reader = new FileReader("example.txt")) {
int character;
while ((character = reader.read()) != -1) {
System.out.print((char) character);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2. FileWriter(文件写入字符流):
简单介绍: 用于向文件中写入字符数据的字符输出流。应用场景: 将程序中生成的文本数据写入文件,如日志记录等。代码演示:import java.io.FileWriter;
import java.io.IOException;
public class FileWriterExample {
public static void main(String[] args) {
String data = "Hello, FileWriter!";
try (FileWriter writer = new FileWriter("output.txt")) {
writer.write(data);
} catch (IOException e) {
e.printStackTrace();
}
}
}
3. BufferedReader(带缓冲的字符读取流):
简单介绍: 带有缓冲区的字符输入流,可以提高读取性能。应用场景: 从文件中读取大量字符数据时,通过缓冲区减少IO操作次数,提升读取效率。代码演示:import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderExample {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
4. BufferedWriter(带缓冲的字符写入流):
简单介绍: 带有缓冲区的字符输出流,可以提高写入性能。应用场景: 向文件中写入大量字符数据时,通过缓冲区减少IO操作次数,提升写入效率。代码演示:import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedWriterExample {
public static void main(String[] args) {
String data = "Hello, BufferedWriter!";
try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
writer.write(data);
} catch (IOException e) {
e.printStackTrace();
}
}
}
5. InputStreamReader(字节流到字符流的桥梁):
简单介绍: 将字节流转换为字符流的桥梁,支持指定字符编码。应用场景: 从字节流中读取字符数据,并根据指定的字符编码转换为字符流。代码演示:import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class InputStreamReaderExample {
public static void main(String[] args) {
try (InputStreamReader isr = new InputStreamReader(new FileInputStream("example.txt"), "UTF-8")) {
int character;
while ((character = isr.read()) != -1) {
System.out.print((char) character);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
6. OutputStreamWriter(字符流到字节流的桥梁):
简单介绍: 将字符流转换为字节流的桥梁,支持指定字符编码。应用场景: 将字符数据转换为字节流,并根据指定的字符编码写入到字节流中。代码演示:import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class OutputStreamWriterExample {
public static void main(String[] args) {
String data = "Hello, OutputStreamWriter!";
try (OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("output.txt"), "UTF-8")) {
osw.write(data);
} catch (IOException e) {
e.printStackTrace();
}
}
}
7. StringReader(从字符串读取字符流):
简单介绍: 从字符串中读取字符数据的字符输入流。应用场景: 将字符串数据作为输入源,进行字符数据的读取和处理。代码演示:import java.io.StringReader;
import java.io.IOException;
public class StringReaderExample {
public static void main(String[] args) {
String data = "Hello, StringReader!";
try (StringReader reader = new StringReader(data)) {
int character;
while ((character = reader.read()) != -1) {
System.out.print((char) character);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
8. StringWriter(写入字符到字符串):
简单介绍: 将字符数据写入到字符串中的字符输出流。应用场景: 将程序中生成的字符数据写入字符串中,方便后续处理或输出。代码演示:import java.io.StringWriter;
import java.io.IOException;
public class StringWriterExample {
public static void main(String[] args) {
try (StringWriter writer = new StringWriter()) {
String data = "Hello, StringWriter!";
writer.write(data);
System.out.println(writer.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
四、完结撒花ING