咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java之IO流啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~
🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!
环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8
前言
在Java开发中,我们往往需要将程序中生成的数据或者结果保存在磁盘文件中,这时我们就需要使用到Java的输入输出流。
在输入输出流中,OutputStream
是Java中最为常用的输出流,它能够将数据流输出到目标设备中,例如磁盘文件、网络等。
本文将对Java中的OutputStream
进行详细介绍,包括它的作用、使用方法、源代码等内容,帮助读者更好地掌握这一重要的输出流。
摘要
本文主要介绍了Java中的OutputStream
,包括它的作用、使用方法、源代码等内容。具体而言,本文将从以下几个方面进行介绍:
OutputStream
的概述和作用;OutputStream
的使用方法,包括如何创建OutputStream
对象、如何使用OutputStream
输出数据、如何关闭OutputStream
;OutputStream
的源代码分析;OutputStream
概述和作用
OutputStream
是Java中的一个抽象类,它是所有输出流的父类,用于写入数据流到目标设备中。OutputStream
提供了一系列的方法,可以用于输出不同类型的数据到目标设备中。
OutputStream
的主要作用包括:
OutputStream
可以将二进制数据流写入到目标设备中,例如将图片、视频等二进制文件写入到磁盘文件中;OutputStream
可以将字符数据流写入到目标设备中,例如将字符串写入到文本文件中;OutputStream
可以将网络数据流写入到目标设备中,例如将数据发送给服务器。使用方法
创建OutputStream对象
在Java中,OutputStream
是一个抽象类,不能直接被实例化。因此,我们需要使用其子类来创建OutputStream
对象。
常用的OutputStream
子类有FileOutputStream
、ByteArrayOutputStream
和DataOutputStream
等。下面以FileOutputStream
为例,介绍如何创建OutputStream对象:
FileOutputStream outputStream = new FileOutputStream("./template/hello.txt");
上述代码创建了一个名为./template/hello.txt
的文件输出流,它将数据流写入到磁盘文件中。
使用OutputStream
输出数据
OutputStream
提供了一系列方法,可以用于输出不同类型的数据到目标设备中。例如,可以使用write()
方法将字节数组写入到磁盘文件中:
byte[] data = "Hello, OutputStream!".getBytes();
outputStream.write(data);
除了write()
方法,OutputStream
还提供了很多其他方法,可以用于输出不同类型的数据。例如,write(byte[] b, int off, int len)
方法可以将字节数组部分内容写入到磁盘文件中。
关闭OutputStream
在使用OutputStream
写入数据时,为了保证数据的完整性和可靠性,需要及时关闭OutputStream
。可以使用close()
方法关闭输出流对象:
outputStream.close();
源代码分析
在Java中,OutputStream是一个抽象类,包路径为:java.io.OutputStream
,
其源代码如下:
public abstract class OutputStream implements Closeable, Flushable {
//...
public abstract void write(int b) throws IOException;
public void write(byte[] b) throws IOException {
write(b, 0, b.length);
}
public void write(byte[] b, int off, int len) throws IOException {
if ((off b.length) || (len b.length) || ((off + len) < 0)) {
throw new IndexOutOfBoundsException();
} else if (len == 0) {
return;
}
for (int i = 0 ; i < len ; i++) {
write(b[off + i]);
}
}
//...
}
OutputStream 中有三个抽象方法未实现,write(int b)
、flush()
和 close()
,同时它还实现了 write(byte[] b)
和 write(byte[] b, int off, int len)
这两个方法。
-
write(int b)
方法是用来向输出流中写入单个字节(b 的低 8 位)。它是一个抽象方法,需要被子类实现。 -
write(byte[] b)
方法是将 byte 数组 b 的所有字节写入到输出流中。它调用了write(byte[] b, int off, int len)
方法,这个方法是将 byte 数组 b 中从偏移量 off 开始的 len 个字节写入输出流中。在实现这个方法的时候,它遍历了 byte 数组中的所有字节,并调用了write(int b)
方法将每个字节写入输出流中。 -
flush()
方法用来将缓冲区中的数据写出到输出流中,这个方法是一个空实现方法,具体实现需要由子类实现。 -
close()
方法用来关闭输出流并释放与之相关的资源。这个方法同样是一个空实现方法,具体实现需要由子类实现。
其源码部分截图如下所示:
总之,OutputStream
是所有输出流的基类,它定义了输出流的基本特性,并提供了一些常用的方法,如写入单个字节、写入字节数组等。任何继承自 OutputStream
的子类都需要实现它的抽象方法,以便正确地实现其功能。
测试用例
以下是一个简单的示例代码,演示了如何使用OutputStream
将字符串写入到磁盘文件中:
测试用例代码
package com.example.javase.io.outputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
* @Author bug菌
* @Date 2023-10-15 19:13
*/
public class OutputStreamTest {
public static void main(String[] args) throws IOException {
String str = "Hello, jym!";
byte[] data = str.getBytes();
OutputStream outputStream = null;
try {
outputStream = new FileOutputStream("./template/hello.txt");
outputStream.write(data);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (outputStream != null) {
outputStream.close();
}
}
}
}
测试代码解析
这是一个使用Java的输出流(OutputStream
)将字符串输出到本地文件的例子。具体解析如下:
String str = "Hello, jym!";
byte[] data = str.getBytes();
OutputStream outputStream = null;
try {
outputStream = new FileOutputStream("./template/hello.txt");
} catch (IOException e) {
e.printStackTrace();
}
这里使用了Java的文件输出流(FileOutputStream
),将数据输出到本地文件。./template/hello.txt
表示本地文件的路径,如果文件不存在则会创建文件。如果创建失败则会抛出IOException。
outputStream.write(data);
将字节数组写入输出流中。
if (outputStream != null) {
outputStream.close();
}
为了防止资源泄漏,需要在使用完输出流后关闭它。这里使用了Java的异常处理机制,在代码中使用try-catch-finally
语句块。
测试结果
根据测试用例执行结果如下:
小结
本文详细介绍了Java中的OutputStream
,包括它的作用、使用方法、源代码等内容。具体而言,本文介绍了OutputStream
的概述和作用,以及如何创建OutputStream
对象、使用OutputStream
输出数据和关闭OutputStream
等内容。
同时,本文还给出了一个简单的演示代码和测试用例,帮助读者更好地掌握OutputStream的使用。
总结
OutputStream
是Java中最常用的输出流之一,它能够将数据流输出到目标设备中,例如磁盘文件、网络等。在使用OutputStream
时,需要注意及时关闭输出流对象,避免数据的丢失或不完整。当需要将程序中生成的数据或结果输出到磁盘文件中时,可以使用OutputStream
来完成。
... ...
ok,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看如下的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬。
「赠人玫瑰,手留余香」,咱们下期拜拜~~
附录源码
如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。
☀️建议/推荐你
无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Java」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门Java编程,就像滚雪球一样,越滚越大,指数级提升。
最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。
同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。
📣关于我
我是bug菌,CSDN | 掘金 | InfoQ | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,华为云 | 阿里云| 腾讯云等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。