慢就是快,让知识先沉淀一会。
目录
流
数据流
文件流
文件复制
缓冲流
字符流
序列化
在 Java 中,流是一种用于处理输入和输出的数据序列的抽象概念。Java 提供了丰富的流类和接口,用于处理不同类型的数据源和数据目标。
Java 中的流可以分为两种主要类型:字节流和字符流。
字节流:字节流以字节为单位进行读写操作,适用于处理二进制数据或字节流形式的文本数据。字节流类位于 java.io
包中,主要包括 InputStream
和 OutputStream
类及其子类,例如 FileInputStream
、FileOutputStream
等。
字符流:字符流以字符为单位进行读写操作,适用于处理文本数据。字符流类位于 java.io
包中,主要包括 Reader
和 Writer
类及其子类,例如 FileReader
、FileWriter
等。
这些流类提供了一组丰富的方法,用于从数据源中读取数据(输入流)或将数据写入到数据目标(输出流)。它们提供了高级的操作,如缓冲、字符编码转换等,以提高性能和灵活性。
数据流是一种特殊的流,它可以读写原始数据类型和字符串。Java 中提供了两个数据流类 DataInputStream 和 DataOutputStream,它们可以方便地读写基本数据类型和字符串。
示例:
// 写入数据
DataOutputStream outputStream = new DataOutputStream(new FileOutputStream("data.txt"));
outputStream.writeInt(10);
outputStream.writeDouble(3.14);
outputStream.writeUTF("Hello, World!");
outputStream.close();
// 读取数据
DataInputStream inputStream = new DataInputStream(new FileInputStream("data.txt"));
int i = inputStream.readInt();
double d = inputStream.readDouble();
String s = inputStream.readUTF();
inputStream.close();
System.out.println(i + " " + d + " " + s);
文件流是一种用于读写文件的流,Java 中提供了 FileInputStream 和 FileOutputStream 两个类,分别用于读取和写入文件。
示例:
// 写入数据
FileOutputStream outputStream = new FileOutputStream("data.txt");
String data = "Hello, World!";
outputStream.write(data.getBytes());
outputStream.close();
// 读取数据
FileInputStream inputStream = new FileInputStream("data.txt");
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
String s = new String(buffer, 0, length);
inputStream.close();
System.out.println(s);
文件复制是一种常见的操作,可以使用 Java I/O API 中的文件流来实现
示例:
FileInputStream inputStream = new FileInputStream("input.txt");
FileOutputStream outputStream = new FileOutputStream("output.txt");
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
inputStream.close();
outputStream.close();
缓冲流是一种增强型的字节流和字符流,它可以提高 I/O 操作的效率。Java 中提供了 BufferedInputStream 和 BufferedOutputStream 两个类,分别用于缓冲读取和写入数据。
示例:
// 写入数据
BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream("data.txt"));
String data = "Hello, World!";
outputStream.write(data.getBytes());
outputStream.close();
// 读取数据
BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream("data.txt"));
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
String s = new String(buffer, 0, length);
inputStream.close();
System.out.println(s);
字符流是一种用于读写字符的流,Java 中提供了 Reader 和 Writer 两个抽象类,分别用于读取和写入字符。
示例:
// 写入数据
FileWriter writer = new FileWriter("data.txt");
String data = "Hello, World!";
writer.write(data);
writer.close();
// 读取数据
FileReader reader = new FileReader("data.txt");
char[] buffer = new char[1024];
int length = reader.read(buffer);
String s = new String(buffer, 0, length);
reader.close();
System.out.println(s);
序列化是一种将对象转换为字节流的过程,Java 中提供了 ObjectInputStream 和 ObjectOutputStream 两个类,用于实现对象的序列化和反序列化。
示例:
// 序列化对象
Person person = new Person("Alice", 18);
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("data.txt"));
outputStream.writeObject(person);
outputStream.close();
// 反序列化对象
ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("data.txt"));
Person p = (Person) inputStream.readObject();
inputStream.close();
System.out.println(p.getName() + " " + p.getAge());