IO流原理
Java的I/O流是Java编程中非常重要的部分。I/O是指Input/Output,是Java编程中输入输出的简称。I/O流是对Java中的输入输出操作进行了抽象和封装,提供了一套通用的读写操作接口,从而简化了对输入输出操作的复杂性。
Java中的I/O流基本原理是通过字节流或字符流的读写操作来完成数据的输入输出,而这些输入输出可以来自文件、网络或其它输入输出设备。Java程序通过打开一个输入流或输出流来连接到实际的物理设备(如磁盘、网络、控制台等),然后通过读写操作来从流中读取数据或向流中写入数据。
分类
在Java中,流可以被分为四种不同的类型:
-
字节流(Byte Stream):以字节为单位进行操作,可以用于读写所有类型的数据,包括二进制数据。
InputStream和OutputStream是字节流的抽象类。FileInputStream和FileOutputStream是字节流的具体实现,可以用于读写文件。ByteArrayInputStream和ByteArrayOutputStream可以用于读写内存中的字节数组。
-
字符流(Character Stream):以字符为单位进行操作,可以用于读写文本数据。
Reader和Writer是字符流的抽象类。FileReader和FileWriter是字符流的具体实现,可以用于读写文件。StringReader和StringWriter可以用于读写字符串。
-
缓冲流(Buffered Stream):为了提高IO操作的效率,Java提供了缓冲流,用于缓冲底层的字节流或字符流。
BufferedInputStream和BufferedOutputStream是字节缓冲流的具体实现。BufferedReader和BufferedWriter是字符缓冲流的具体实现。
-
对象流(Object Stream):用于读写Java对象,需要将Java对象转换成字节流进行传输。
ObjectInputStream和ObjectOutputStream是对象流的具体实现。
IO流中的常用类
Java中IO流常用的类包括:
InputStream:字节输入流的抽象类,是所有字节输入流的超类,常用子类有FileInputStream、ByteArrayInputStream、ObjectInputStream等。
InputStream inputStream = new FileInputStream("example.txt");
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
while (length != -1) {
// do something with the data
length = inputStream.read(buffer);
}
inputStream.close();
OutputStream:字节输出流的抽象类,是所有字节输出流的超类,常用子类有FileOutputStream、ByteArrayOutputStream、ObjectOutputStream等。
OutputStream outputStream = new FileOutputStream("example.txt");
byte[] data = "Hello, world!".getBytes();
outputStream.write(data);
outputStream.close();
Reader:字符输入流的抽象类,是所有字符输入流的超类,常用子类有FileReader、StringReader等。
Reader reader = new FileReader("example.txt");
char[] buffer = new char[1024];
int length = reader.read(buffer);
while (length != -1) {
// do something with the data
length = reader.read(buffer);
}
reader.close();
Writer:字符输出流的抽象类,是所有字符输出流的超类,常用子类有FileWriter、StringWriter等。
Writer writer = new FileWriter("example.txt");
String data = "Hello, world!";
writer.write(data);
writer.close();
BufferedInputStream:字节缓冲输入流,是InputStream的子类,常用于提高读取字节流的效率。
InputStream inputStream = new FileInputStream("example.txt");
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
byte[] buffer = new byte[1024];
int length = bufferedInputStream.read(buffer);
while (length != -1) {
// do something with the data
length = bufferedInputStream.read(buffer);
}
bufferedInputStream.close();
BufferedOutputStream:字节缓冲输出流,是OutputStream的子类,常用于提高写入字节流的效率。
OutputStream outputStream = new FileOutputStream("example.txt");
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
byte[] data = "Hello, world!".getBytes();
bufferedOutputStream.write(data);
bufferedOutputStream.close();
BufferedReader:字符缓冲输入流,是Reader的子类,常用于提高读取字符流的效率。
Reader reader = new FileReader("example.txt");
BufferedReader bufferedReader = new BufferedReader(reader);
String line = bufferedReader.readLine();
while (line != null) {
// do something with the data
line = bufferedReader.readLine();
}
bufferedReader.close();