在 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
查询台风信息和台风路径
查询国家预警信息发布中心发布的气象预警信息,如:台风、暴雨、暴雪、寒潮、大风、沙尘暴、高温、干旱、雷电等预警类型及预警等级、时间等信息。
支持全球200多个国家或地区,以及国内三网运营商基站位置信息数据查询。
强大的数据积累,依托海量的数据,返回内容丰富度高,包含url、网页标题、正文摘要等,在需要时能够实时访问互联网信息,从而突破信息壁垒,实现更精准、更全面的输出。
通过出发地、目的地、出发日期等信息查询航班信息。