浅谈Java的输入输出流(Java输入输出流详解:入门到进阶指南)

原创
ithorizon 7个月前 (10-19) 阅读数 25 #后端开发

Java输入输出流详解:入门到进阶指南

一、Java输入输出流概述

Java的输入输出流(Input/Output Streams)是Java I/O(Input/Output)库的核心部分,用于处理数据的读取和写入。Java提供了丰盈的输入输出流类,以拥护不同类型的数据处理需求。流(Stream)是一个抽象的概念,代表了一系列有序的数据元素,这些数据元素可以是字节、字符等。

二、Java输入输出流分类

Java输入输出流核心分为以下四类:

  • 字节流(Byte Streams)
  • 字符流(Character Streams)
  • 文件流(File Streams)
  • 对象流(Object Streams)

三、字节流

字节流是处理字节数据的流,核心用于处理二进制数据。Java提供了以下两个抽象类作为字节流的基类:

  • InputStream:输入字节流的抽象类,提供了读取字节数据的方法。
  • OutputStream:输出字节流的抽象类,提供了写入字节数据的方法。

3.1 InputStream类

InputStream类有以下常用方法:

int read(); // 读取一个字节的数据,返回读取的字节值,如果到达流的末尾,则返回-1

int read(byte[] b); // 读取b.length个字节的数据到数组b中,返回实际读取的字节数

int read(byte[] b, int off, int len); // 从数组b的off位置起初读取len个字节的数据,返回实际读取的字节数

long skip(long n); // 跳过n个字节,返回实际跳过的字节数

int available(); // 返回此输入流中可读取的字节数

void close(); // 关闭此输入流并释放与其相关的资源

3.2 OutputStream类

OutputStream类有以下常用方法:

void write(int b); // 将一个字节写入输出流

void write(byte[] b); // 将数组b中的所有字节写入输出流

void write(byte[] b, int off, int len); // 将数组b中从off位置起初的len个字节写入输出流

void flush(); // 清空输出流,并强制将所有缓冲的输出字节写入输出流

void close(); // 关闭输出流并释放与其相关的资源

四、字符流

字符流是处理字符数据的流,核心用于处理文本数据。Java提供了以下两个抽象类作为字符流的基类:

  • Reader:输入字符流的抽象类,提供了读取字符数据的方法。
  • Writer:输出字符流的抽象类,提供了写入字符数据的方法。

4.1 Reader类

Reader类有以下常用方法:

int read(); // 读取一个字符的数据,返回读取的字符值,如果到达流的末尾,则返回-1

int read(char[] cbuf); // 读取cbuf.length个字符的数据到数组cbuf中,返回实际读取的字符数

int read(char[] cbuf, int off, int len); // 从数组cbuf的off位置起初读取len个字符的数据,返回实际读取的字符数

void close(); // 关闭此输入流并释放与其相关的资源

4.2 Writer类

Writer类有以下常用方法:

void write(int c); // 将一个字符写入输出流

void write(char[] cbuf); // 将数组cbuf中的所有字符写入输出流

void write(char[] cbuf, int off, int len); // 将数组cbuf中从off位置起初的len个字符写入输出流

void write(String str); // 将字符串str中的字符写入输出流

void write(String str, int off, int len); // 将字符串str中从off位置起初的len个字符写入输出流

void flush(); // 清空输出流,并强制将所有缓冲的输出字符写入输出流

void close(); // 关闭输出流并释放与其相关的资源

五、文件流

文件流是用于处理文件输入输出的流,Java提供了以下两个类:

  • FileInputStream:文件输入流,用于从文件中读取字节。
  • FileOutputStream:文件输出流,用于向文件写入字节。

5.1 FileInputStream类

FileInputStream类是InputStream的子类,以下是一个简洁的使用示例:

FileInputStream fis = new FileInputStream("example.txt");

int b;

while ((b = fis.read()) != -1) {

System.out.print((char) b);

}

fis.close();

5.2 FileOutputStream类

FileOutputStream类是OutputStream的子类,以下是一个简洁的使用示例:

FileOutputStream fos = new FileOutputStream("example.txt");

fos.write('A');

fos.write('B');

fos.write('C');

fos.close();

六、对象流

对象流是用于处理对象序列化和反序列化的流,Java提供了以下两个类:

  • ObjectInputStream:对象输入流,用于从流中读取对象。
  • ObjectOutputStream:对象输出流,用于向流中写入对象。

6.1 ObjectInputStream类

ObjectInputStream类是InputStream的子类,以下是一个简洁的使用示例:

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("example.ser"));

Object obj = ois.readObject();

ois.close();

6.2 ObjectOutputStream类

ObjectOutputStream类是OutputStream的子类,以下是一个简洁的使用示例:

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("example.ser"));

oos.writeObject(new MyClass());

oos.close();

七、进阶:过滤器流和管道流

过滤器流(Filter Streams)和管道流(Pipe Streams)是Java I/O库中的高级特性,它们提供了一些额外的功能,如数据缓冲、数据转换等。

7.1 过滤器流

过滤器流是包装其他流的流,它们可以提供数据处理的附加功能。以下是一些常用的过滤器流:

  • BufferedInputStream:为输入字节流提供缓冲功能。
  • BufferedOutputStream:为输出字节流提供缓冲功能。
  • BufferedReader:为输入字符流提供缓冲功能。
  • BufferedWriter:为输出字符流提供缓冲功能。

7.2 管道流

管道流用于连接两个线程之间的数据传输。以下是一些常用的管道流:

  • PipedInputStream:管道输入流,用于读取管道中的数据。
  • PipedOutputStream:管道输出流,用于向管道写入数据。

八、总结

Java的输入输出流是Java I/O库的核心部分,提供了丰盈的流类以拥护不同类型的数据处理需求。通过懂得字节流、字符流、文件流和对象流的概念和用法,可以更好地处理Java程序中的数据读写。此外,过滤器流和管道流等高级特性可以进一步扩展Java I/O的功能,减成本时间程序的效能和灵活性。


本文由IT视界版权所有,禁止未经同意的情况下转发

文章标签: 后端开发


热门