导航
字节流
字节流的抽象超类
OutputStream
这个抽象类是表示字节输出流的所有类的超类。
输出数据的 3 种方式:
方法名 | 说明 |
---|---|
abstract void write(int b) | 将指定的字节写入此输出流 |
void write(byte[] b) | 将 b.length 字节从指定的字节数组写入此输出流 |
void write(byte[] b, int off, int len) | 从指定字节数组的下标 off 开始写入 len 个字节输出到此输出流 |
InputStream
这个抽象类是表示输入字节流的所有类的超类。
输入数据的 3 种方式:
方法名 | 说明 |
---|---|
abstract int read() | 从输入流读取数据的下一个字节,如果已经达到流的末尾,则返回 -1 |
int read(byte[] b) | 从输入流读取一些字节数,并将它们存储到缓冲区 b,如果已经达到流的末尾,则返回 -1 |
int read(byte[] b, int off, int len)) | 从输入流读取最多 len 字节的数据到一个字节数组,如果已经达到流的末尾,则返回 -1 |
文件字节流
FileOutputStream
文件输出流是用于将数据写入到输出流 File 或一个 FileDescriptor。
使用字节输出流写数据的步骤
- 创建字节输出流对象(调用系统功能创建了文件,创建字节输出流对象,让字节输出流对象指向文件)
- 调用字节输出流对象的写数据方法
- 释放资源(关闭此文件输出流并释放与此流相关联的任何系统资源)
常用写法:
FileOutputStream fos = null;
try {
// 参数传入 true,表示字节将被写入到文件的末尾,即向文件追加内容。
// 否则相当于删除了原文件内容重新写入数据
// fos = new FileOutputStream("io.txt", true);
fos = new FileOutputStream("io.txt");
fos.write("hello world".getBytes());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// JDK1.7 引入了 try with resources 写法替代上面写法
try (FileOutputStream fos1 = new FileOutputStream("io.txt")) {
fos1.write("hello world".getBytes());
} catch (IOException e) {
e.printStackTrace();
}
FileInputStream
文件输入流从文件系统中的文件获取输入字节,用于读取诸如图像数据的原始字节流。
FileInputStream fis = new FileInputStream("io.txt");
byte[] bytes = new byte[1024];
int len;
while ((len = fis.read(bytes)) != -1) {
System.out.println(new String(bytes, 0, len));
}
fis.close();
字节缓冲流
BufferedOutputStream
该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用。
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("io.txt"));
bos.write("hello BufferedOutputStream ".getBytes());
bos.close();
BufferedInputStream
该类为另一个输入流添加了缓冲输入等功能。当创建 BufferedInputStream 时,将创建一个内部缓冲区数组。当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次有多个字节。
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("io.txt"));
byte[] bytes = new byte[1024];
int len;
while ((len = bis.read(bytes)) != -1) {
System.out.println(new String(bytes, 0, len));
}
bis.close();