哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!
哈喽,各位小伙伴们,你们好呀,我是喵手。
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!
前言
在Java中,输入输出流是非常重要的概念。输入流用于读取数据,而输出流则用于将数据写入到输出目的地。在本文中,我们将着重介绍Java中的OutputStream类,这是一个抽象类,用于向各种输出目的地写入数据。
摘要
本文将介绍使用Java中的OutputStream类进行文件、网络、控制台的输出操作,并会分析该类的优缺点。
OutputStream类
简介
在Java中,OutputStream类是一个抽象类,它提供了向各种输出目的地写入数据的一般方法。OutputStream类是所有输出流类的祖先类,包括FileOutputStream、ByteArrayOutputStream、PipedOutputStream等。
OutputStream类的主要方法是write()。它的基本形式接受一个字节,但也有其他几种变体形式,如写入整个字节数组、部分字节数组等。
源代码解析
Java中的OutputStream类是一个抽象类,它是字节输出流的基类。OutputStream类提供了许多方法,用于将字节写入输出流中。
以下是OutputStream类的一些常见方法:
- public void write(int b):将指定的字节写入输出流。
- public void write(byte[] b):将b数组中的所有字节写入输出流。
- public void write(byte[] b, int off, int len):将b数组中从off位置开始的len个字节写入输出流。
- public void flush():刷新输出流,强制将所有缓冲的输出字节写入底层输出流。
- public void close():关闭输出流并释放与该流相关联的所有系统资源。
OutputStream类的实现通常是通过子类来完成的,例如FileOutputStream、ByteArrayOutputStream、PipedOutputStream等。
以下是OutputStream类的部分源代码:
public abstract class OutputStream implements Closeable, Flushable {
    // …
    public void write(byte b[]) throws IOException {
        write(b, 0, b.length);
    }
    public void write(byte b[], int off, int len) throws IOException {
        if (b == null) {
            throw new NullPointerException();
        } else if (off < 0 || len < 0 || off + len > b.length) {
            throw new IndexOutOfBoundsException();
        } else if (len == 0) {
            return;
        }
        for (int i = 0; i < len; i++) {
            write(b[off + i]);
        }
    }
    public abstract void write(int b) throws IOException;
    public void flush() throws IOException {
    }
    public void close() throws IOException {
    }
    // …
}
从以上代码可以看出,OutputStream类定义了抽象方法write(),其余方法都是具体实现的。在write(byte b[])和write(byte b[], int off, int len)方法中,也调用了write(int b)方法来实现写入操作。
OutputStream类还实现了Closeable和Flushable接口,使得它可以通过调用close()和flush()方法来关闭和刷新输出流。
如下是部分源码截图:

应用场景案例
OutputStream类可以用于多种输出目的地,如文件、网络、控制台等。下面是一些常见的应用场景案例:
1. 将数据写入文件
使用FileOutputStream可以将数据写入文件。以下是一个示例:
FileOutputStream fos = new FileOutputStream("output.txt");
for (int i = 0; i < 10; i++) {
    fos.write(i);
}
fos.close();
2. 将数据写入网络
使用SocketOutputStream可以将数据写入网络。以下是一个示例:
Socket socket = new Socket("127.0.0.1", 8080);
OutputStream os = socket.getOutputStream();
os.write("Hello, world".getBytes());
os.close();
3. 将数据打印到控制台
使用System.out可以将数据打印到控制台。以下是一个示例:
System.out.write("Hello, world".getBytes());
优缺点分析
优点
- OutputStream类具有通用性,可以向多种输出目的地写入数据。
- OutputStream类提供了多种写入数据的方法,可以根据需求选择适当的方法。
- OutputStream类是抽象类,可以被继承并进行扩展。
缺点
- OutputStream类的write()方法不能保证一次写入所以数据都成功,需要在外部进行判断并处理。
类代码方法介绍
以下是OutputStream类的主要方法:
| 方法名称 | 说明 | 
|---|---|
| write(int b) | 将指定的字节写入输出流 | 
| write(byte[] b) | 将指定的字节数组写入输出流 | 
| write(byte[] b, int off, int len) | 将指定的字节数组中的一部分写入输出流 | 
| flush() | 刷新输出流 | 
| close() | 关闭输出流 | 
测试用例
测试代码演示
以下是一个OutputStream的测试用例:
package com.example.javase.se.classes;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
 * @Author ms
 * @Date 2023-11-05 18:26
 */
public class OutputStreamTest {
    public static void main(String[] args) {
        // 写入文件
        try {
            FileOutputStream fos = new FileOutputStream("test.txt");
            byte[] data = "Hello, world!".getBytes();
            fos.write(data);
            fos.flush();
            fos.close();
        } catch (IOException e) {
            System.out.println("写入文件时发生错误:" + e);
        }
        // 写入控制台
        OutputStream os = System.out;
        byte[] data = "Hello, world!".getBytes();
        try {
            os.write(data);
            os.flush();
            os.close();
        } catch (IOException e) {
            System.out.println("写入控制台时发生错误:" + e);
        }
    }
}
测试结果
根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

测试代码分析
根据如上测试用例,在此我给大家进行深入详细的解读一下测试代码,以便于更多的同学能够理解并加深印象。
这是一个使用Java的输出流(OutputStream)进行写操作的示例代码。代码主要包括两部分:
第一部分在文件系统中创建一个名为“test.txt”的文本文件,并在该文件中写入“Hello, world!”字符串。
第二部分将同样的字符串输出到控制台。输出流通过System.out获取,然后将字符串转换为字节数组,使用write方法将字节数组写入控制台。最后通过flush和close方法刷新并关闭输出流。
需要注意的是,这里的文件和控制台的输出流类型都是OutputStream,这个抽象类提供了写入字节数据的通用方法,实际使用时需要根据具体需求选择不同的OutputStream子类进行实例化。
全文小结
在本文中,我们介绍了Java中的OutputStream类,该类提供了向各种输出目的地写入数据的一般方法。我们学习了如何使用OutputStream将数据写入文件、网络、控制台等目的地,并分析了该类的优缺点。最后,我们提供了一个OutputStream的测试用例。
总结
本文介绍了Java中的OutputStream类,它是一个抽象类,提供了向各种输出目的地写入数据的一般方法。我们学习了如何使用OutputStream将数据写入文件、网络、控制台等目的地,并分析了该类的优缺点。此外,本文还提供了一个OutputStream的测试用例。总的来说,OutputStream是Java中重要的输出流类之一,提供了许多方法,可以根据需求选择适当的方法来实现数据的写入操作。
… …
文末
好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。
… …
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
… …
文末
好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。
… …
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
















![LLM 大模型学习必知必会系列(十二):VLLM性能飞跃部署实践:从推理加速到高效部署的全方位优化[更多内容:XInference/FastChat等框架]](https://img-blog.csdnimg.cn/img_convert/b10128f1222cfef40c49ec90fbdfded4.png)


