Java IO之包装流详解
Java中的IO(输入输出)操作可以通过流(Stream)的形式进行。流分为节点流和处理流,其中处理流又称为包装流。本文主要介绍Java IO中的包装流,包括作用、示例和常见的包装流。
包装流的作用
包装流是对节点流的装饰,它包裹一个已有的节点流并且拥有同样的类型,但提供了更多的功能。包装流常常用于流的串联,通过多个处理流的组合可以完成复杂的IO操作。
包装流示例
BufferedInputStream
BufferedInputStream
是一个输入流的包装流,它提供了缓冲机制,可以在读取数据时提高IO效率。
以下代码演示了通过BufferedInputStream
从文件中读取数据:
try (FileInputStream fis = new FileInputStream("example.txt");
BufferedInputStream bis = new BufferedInputStream(fis)) {
byte[] buffer = new byte[1024];
int len;
while ((len = bis.read(buffer)) != -1) {
System.out.println(new String(buffer, 0, len));
}
} catch (IOException e) {
e.printStackTrace();
}
在上述代码中,我们通过FileInputStream
读取文件,并将其包装成BufferedInputStream
。之后我们使用BufferedInputStream
的read()
方法从文件中读取数据,这里读取的是1024字节的缓冲区数据。
DataOutputStream
DataOutputStream
是一个输出流的包装流,它可以方便地写基本数据类型(如int、double等)到输出流中。
以下代码演示了通过DataOutputStream
将一个字符串和一个整数值写到文件中:
try (FileOutputStream fos = new FileOutputStream("example.txt");
DataOutputStream dos = new DataOutputStream(fos)) {
dos.writeUTF("Hello, world!");
dos.writeInt(100);
} catch (IOException e) {
e.printStackTrace();
}
在上述代码中,我们通过FileOutputStream
创建一个文件,并将其包装成DataOutputStream
。之后我们使用DataOutputStream
的writeUTF()
方法向文件中写入字符串类型的数据,使用writeInt()
方法向文件中写入整型数据。
常见的包装流
Java中常见的包装流有:
- BufferedInputStream/BufferedOutputStream:提供了缓冲机制,可以提高IO效率。
- DataInputStream/DataOutputStream:可以方便地读写基本数据类型。
- InputStreamReader/OutputStreamWriter:将字节流转换成字符流,提供了编码转换的能力。
- ObjectInputStream/ObjectOutputStream:可以方便地读写Java对象,并将其持久化到文件中。
- ZipInputStream/ZipOutputStream:提供了压缩/解压缩的功能,在文件传输和存储方面有很多应用。
通过组合使用这些包装流,我们可以完成更多的IO操作,例如将Java对象序列化和反序列化到文件中,或者将一组文件打包成一个压缩包。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java IO之包装流详解 - Python技术站