前言
字节流是 Java I/O 系统的一部分,专门用于处理字节数据。由于所有数据在计算机中最终都以字节形式存在,这意味着字节流可以操作任何类型的数据,包括文本、图片、视频等。
Java 提供了多种字节流类,这些类继承自 InputStream
和 OutputStream
类。以下是一些常用的字节流类:
1.InputStream:字节输入流的抽象类,所有字节输入流都继承自此类。
- FileInputStream:用于从文件中读取字节流。
- ByteArrayInputStream:从字节数组中读取数据。
- BufferedInputStream:为其他输入流提供缓冲功能,提高读取效率。
- DataInputStream:用于读取基本数据类型(如 int、float 等)的输入流。
2.OutputStream:字节输出流的抽象类,所有字节输出流都继承自此类。
- FileOutputStream:用于将字节流写入文件。
- ByteArrayOutputStream:将数据写入字节数组。
- BufferedOutputStream:为其他输出流提供缓冲功能,提高写入效率。
- DataOutputStream:用于向输出流写入基本数据类型。
一、FileInputStream和FileOutStream
FileInputStream
和 FileOutputStream
是 Java 中用于处理文件的字节流类。它们分别从文件读取和向文件写入原始字节数据。
1.FileInputStream
常用构造函数:
FileInputStream(String name)
:根据指定的文件名创建一个文件输入流。FileInputStream(File file)
:根据指定的File
对象创建一个文件输入流。
常用方法:
int read()
:读取一个字节的数据,并返回一个整数(0~255),如果到达文件末尾则返回 -1。int read(byte[] b)
:读取多个字节到字节数组中,返回实际读取的字节数。void close()
:关闭输入流,释放与之相关的所有系统资源。
public static void main(String[] args) {
try {
java.io.FileInputStream fis = new java.io.FileInputStream("fileName.txt");
int byteData;
while((byteData = fis.read())!= -1){
// 将字节转化为字符
System.out.println((char) byteData);
}
} catch (IOException e) {
e.printStackTrace();
}
}
2.FileOutStream
常用构造函数:
FileOutputStream(String name)
:根据指定的文件名创建一个文件输出流。FileOutputStream(File file)
:根据指定的File
对象创建一个文件输出流。FileOutputStream(String name, boolean append)
:如果append
为true
,则在文件末尾追加内容;如果为false
,则覆盖原文件。
常用方法:
void write(int b)
:将指定的字节写入文件。void write(byte[] b)
:将字节数组中的所有字节写入文件。void close()
:关闭输出流,释放与之相关的所有系统资源。
public static void main(String[] args) {
try {
java.io.FileOutputStream fos = new java.io.FileOutputStream("fileName.txt");
String content = "Hello World";
fos.write(content.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
二、BufferedInputStream和BufferedOutputStream
BufferedInputStream
和 BufferedOutputStream
是 Java 中用于处理输入和输出流的缓冲流类,它们主要用于提高读写效率,减少对底层设备的直接访问次数。
1.BufferedInputStream
BufferedInputStream
是一个输入流,使用内部缓冲区来提高读取效率。它会先将数据读取到内存缓冲区中,随后再从缓冲区中读取数据。
常用构造函数:
BufferedInputStream(InputStream in)
:根据指定的输入流创建一个新的BufferedInputStream
,使用默认大小的缓冲区。
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("fileName.txt"));
-
BufferedInputStream(InputStream in, int size):
根据指定的输入流和缓冲区大小创建一个新的BufferedInputStream
。
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("fileName.txt"), 8192);
常用方法:
int read():
读取一个字节的数据,并返回一个整数(0~255)。如果到达流的末尾,则返回 -1。int read(byte[] b)
:读取多个字节到字节数组中,并返回实际读取的字节数。int read(byte[] b, int off, int len)
:从输入流中读取最多len
个字节的数据,并将其存储在字节数组b
中,从off
位置开始。void close()
:关闭输入流,释放与之相关的所有系统资源。
public static void main(String[] args) {
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("fileName.txt"));
int byteData;
while((byteData = bis.read()) != -1 ){
System.out.println((char) byteData);
}
} catch (IOException e) {
e.printStackTrace();
}
2.BufferedOuptStream
BufferedOutputStream
是一个用于提高向文件或其他输出流写入字节流效率的类。它通过使用内部缓冲区来减少实际写入操作的次数,从而提高性能。
常用构造函数:
BufferedOutputStream(OutputStream out)
:根据指定的输出流创建一个新的BufferedOutputStream
,使用默认大小的缓冲区。
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("fileName.txt"));
-
BufferedOutputStream(OutputStream out, int size)
:根据指定的输出流和缓冲区大小创建一个新的BufferedOutputStream
。
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("fileName.txt"), 8192);
常用方法:
void write(int b):
将指定的字节写入输出流。void write(byte[] b):
将字节数组中的所有字节写入输出流。void write(byte[] b, int off, int len):
将字节数组中的指定部分写入输出流,从off
位置开始,写入len
个字节。void flush():
刷新此输出流,强制将所有缓冲的输出字节写入底层输出流。void close():
关闭输出流,释放与之相关的所有系统资源。
public static void main(String[] args) {
try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("C:\\Users\\lizhonghua\\Desktop\\HarmonyOS.txt"))) {
String content = "Hello Worldfghj!";
// 将字符串转换为字节数组并写入文件
bos.write(content.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}