在 Java 中,字节流是用于处理二进制数据的输入输出方式,主要通过 InputStream 和 OutputStream 这两个抽象类实现。它们是 Java I/O 系统的核心部分,广泛应用于文件读写、网络传输、数据序列化等场景。本文将详细介绍 InputStream 和 OutputStream 的类结构、核心方法以及实际使用示例,帮助开发者更好地理解和应用字节流。
InputStream 是所有字节输入流的父类,它定义了从源中读取字节的基本操作。其子类包括 FileInputStream、ByteArrayInputStream、BufferedInputStream 等,适用于不同类型的输入来源。
read() 方法
用于从输入流中读取一个字节,返回值为读取到的字节(0~255),如果已到达流末尾则返回 -1。
int data;
while ((data = inputStream.read()) != -1) {
System.out.print((char) data);
}
read(byte[] b) 方法
将字节读入指定的字节数组中,返回实际读取的字节数。常用于批量读取数据。
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
// 处理 buffer 数据
}
available() 方法
返回当前可读取的字节数,用于判断是否还有数据未读。
close() 方法
关闭输入流,释放相关资源。
OutputStream 是所有字节输出流的父类,用于向目标写入字节数据。其子类包括 FileOutputStream、ByteArrayOutputStream、BufferedOutputStream 等。
write(int b) 方法
向输出流中写入一个字节,参数 b 是一个 0~255 的整数。
outputStream.write('A');
write(byte[] b) 方法
将字节数组中的所有字节写入输出流。
byte[] data = "Hello, World!".getBytes();
outputStream.write(data);
flush() 方法
刷新输出流,确保所有缓冲的数据被写出,常用于需要立即写入磁盘或网络的情况。
close() 方法
关闭输出流,释放相关资源。
FileInputStream 和 FileOutputStream
用于读写本地文件。例如:
try (FileInputStream fis = new FileInputStream("input.txt");
FileOutputStream fos = new FileOutputStream("output.txt")) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
fos.write(buffer, 0, bytesRead);
}
} catch (IOException e) {
e.printStackTrace();
}
BufferedInputStream 和 BufferedOutputStream
提供缓冲功能,提高读写效率。通常与 FileInputStream 或 FileOutputStream 一起使用。
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("input.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("output.txt"))) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = bis.read(buffer)) != -1) {
bos.write(buffer, 0, bytesRead);
}
} catch (IOException e) {
e.printStackTrace();
}
ByteArrayInputStream 和 ByteArrayOutputStream
用于在内存中进行字节流操作,常用于临时存储或数据转换。
byte[] data = "Hello".getBytes();
ByteArrayInputStream bais = new ByteArrayInputStream(data);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int b;
while ((b = bais.read()) != -1) {
baos.write(b);
}
System.out.println(baos.toString()); // 输出: Hello
在使用字节流时,应始终使用 try-with-resources 语句确保流能被正确关闭。
对于频繁读写操作,建议使用缓冲流(如 BufferedInputStream 和 BufferedOutputStream)以提升性能。
避免在多线程环境中共享同一个流对象,以免造成数据混乱或异常。
InputStream 和 OutputStream 是 Java 中处理字节流的基础类,适用于各种二进制数据的读写操作。掌握它们的类结构、核心方法和使用技巧,能够帮助开发者高效地完成文件操作、网络通信等任务。合理选择流类型并结合缓冲机制,可以显著提升程序的性能与稳定性。理解并熟练运用字节流,是 Java 开发者必备的技能之一。
声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com
通过出发地、目的地、出发日期等信息查询航班信息。
通过站到站查询火车班次时刻表等信息,同时已集成至聚合MCP Server。火车票订票MCP不仅能赋予你的Agent火车时刻查询,还能支持在线订票能力。
基于被查询人既往12个月个税缴纳数据,通过模型计算出被查询人的个税经济能力评级
基于被查询人既往12个月个税缴纳数据,通过模型计算出被查询人的个税经济能力评级
通过车辆vin码查询车辆的过户次数等相关信息